That didn't work
Opera: 137.0.6036.63 (updated automatically from 136.0.6008.80)
OS: Windows 11 Pro, per-user install (%LOCALAPPDATA%\Programs\Opera)
The problem
I don't want the Opera browser assistant (browser_assistant.exe) running. "Run at startup" is off (installer_prefs.json has "run-at-startup": false, and there's no Run-key entry). To make sure it stayed off, I also put a deny-execute permission on the assistant folder. That held for about a month: assistant.log shows no activity from 16 Sep to 19 Oct.
On 19 Oct a silent automatic update to 137.0.6036.63 undid all of it in about 20 seconds:
- It reinstalled the assistant as an "extra app"
- It reset the folder's permissions, which removed my deny entry
- It recreated the
Opera scheduled assistant Autoupdate <id>scheduled task (logon + daily triggers) - It started
browser_assistant.exeimmediately
The autoupdater passed --run-at-startup=1 even though my saved preference is false. It also passed --pintotaskbar=1.
Permissions can't keep it blocked: the installer runs as my user account, and I own the folder, so it can always rewrite the permissions.
Questions for Opera
- Is there a supported way to opt out of the assistant that survives updates? For example a setting, an installer flag such as
--with-assistant=0, or a policy? - Why does the autoupdater pass
--run-at-startup=1when the saved preference isfalse? - Could updates leave the assistant alone if the user has removed or disabled it?
Workaround (until there's a real fix)
A small script, run as SYSTEM every 10 minutes from Task Scheduler. It kills the assistant, deletes the assistant's update task, and puts back a deny-execute entry on browser_assistant.exe only. It leaves the rest of the folder alone, so browser updates can still run the assistant installer and won't fail.
Save as C:\Program Files\OperaAssistantWatchdog\watchdog.cmd. Editing Program Files needs admin rights, which is what you want for a script that runs as SYSTEM. Change the first two set lines to match your machine:
@echo off
setlocal
set "EXE=C:\Users\YOURNAME\AppData\Local\Programs\Opera\assistant\browser_assistant.exe"
set "ACCOUNT=YOURPC\YOURNAME"
set "LOG=%~dp0watchdog.log"
tasklist /fi "imagename eq browser_assistant.exe" /nh | find /i "browser_assistant.exe" >nul
if errorlevel 1 goto tasks
taskkill /f /im browser_assistant.exe >nul 2>&1
call :log Killed browser_assistant.exe
:tasks
for /f "tokens=1 delims=," %%T in ('schtasks /query /fo csv /nh 2^>nul ^| findstr /i /c:"Opera scheduled assistant Autoupdate"') do (
schtasks /delete /tn %%T /f >nul 2>&1 && call :log Deleted task %%~T
)
if not exist "%EXE%" goto done
icacls "%EXE%" | find "(DENY)" >nul
if not errorlevel 1 goto done
icacls "%EXE%" /deny "%ACCOUNT%":(X) >nul && call :log Re-applied execute deny
:done
exit /b 0
:log
>>"%LOG%" echo %date% %time% %*
exit /b 0
Schedule it from an elevated command prompt:
schtasks /create /tn "Opera Assistant Watchdog" /ru SYSTEM /sc minute /mo 10 ^ /tr "cmd.exe /c \"C:\Program Files\OperaAssistantWatchdog\watchdog.cmd\""
It only writes to watchdog.log when it actually does something, so after the next Opera update you should see one "Killed / Deleted task / Re-applied" set of lines in the log file.
Downside: after an update, the assistant can run for up to 10 minutes before the script catches it. A proper opt-out from Opera would be much better.