-
Notifications
You must be signed in to change notification settings - Fork 973
Add Vivaldi as a Fleet-maintained app #41552
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
851bc1b
Add Vivaldi as a fleet-maintained app (macOS)
tux234 f663047
Add Vivaldi as fleet-maintained app (macOS + Windows) and fix apps.js…
tux234 971cb41
Fix Vivaldi Windows uninstall: use Chromium flags directly instead of…
tux234 2b0669d
Simplify Vivaldi Windows install script: remove scheduled task boiler…
tux234 8855672
Restore apps.json entries to match main (undo ingester re-encoding)
tux234 cab8fa9
Merge branch 'main' into add-vivaldi-fma
tux234 5906237
Merge remote-tracking branch 'origin/main' into add-vivaldi-fma
tux234 698fec4
Regenerate Vivaldi FMA outputs; install machine-wide on Windows
tux234 8388413
Merge remote-tracking branch 'origin/add-vivaldi-fma' into add-vivald…
tux234 b313ee5
Address CodeRabbit: HKLM-first uninstall lookup + robust UninstallStr…
tux234 dfc4735
Merge branch 'main' into add-vivaldi-fma
tux234 8322d08
Merge branch 'main' into add-vivaldi-fma
allenhouchins 559931c
Potential fix for pull request finding
allenhouchins File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
ee/maintained-apps/ingesters/homebrew/external_refs/vivaldi.go
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| package externalrefs | ||
|
|
||
| import ( | ||
| maintained_apps "github.com/fleetdm/fleet/v4/ee/maintained-apps" | ||
| ) | ||
|
|
||
| func VivaldiDMGInstaller(app *maintained_apps.FMAManifestApp) (*maintained_apps.FMAManifestApp, error) { | ||
| // Override installer URL to use Vivaldi's direct DMG instead of Homebrew's tar.xz | ||
| // The tar.xz format is not supported by the Fleet ingester's install script generator. | ||
| // Version is kept from Homebrew (not set to "latest") | ||
| app.InstallerURL = "https://downloads.vivaldi.com/stable/Vivaldi." + app.Version + ".universal.dmg" | ||
| // Set SHA256 to "no_check" since we're using a different installer URL than Homebrew | ||
| app.SHA256 = "no_check" | ||
|
|
||
| return app, nil | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| { | ||
| "name": "Vivaldi", | ||
| "slug": "vivaldi/darwin", | ||
| "unique_identifier": "com.vivaldi.Vivaldi", | ||
| "token": "vivaldi", | ||
| "installer_format": "dmg", | ||
| "default_categories": ["Browsers"] | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| # Install Vivaldi silently, machine-wide (Chromium-based browser). | ||
| # Fleet runs installs as SYSTEM, so --system-level is required to install for | ||
| # all users under %ProgramFiles% (and register under HKLM). Without it the | ||
| # installer lands in the SYSTEM profile and is invisible to the real user. | ||
| $process = Start-Process -FilePath $env:INSTALLER_PATH ` | ||
| -ArgumentList "--vivaldi-silent --do-not-launch-chrome --system-level" ` | ||
| -NoNewWindow -PassThru -Wait | ||
| Exit $process.ExitCode |
74 changes: 74 additions & 0 deletions
74
ee/maintained-apps/inputs/winget/scripts/vivaldi_uninstall.ps1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,74 @@ | ||
| # Uninstall Vivaldi (machine-wide Chromium-based browser). | ||
| # Looks up the uninstall entry under HKLM (machine install) with an HKCU | ||
| # fallback, then runs the Chromium uninstaller with --force-uninstall. | ||
|
|
||
| $displayName = "Vivaldi" | ||
| $publisher = "Vivaldi Technologies AS." | ||
|
|
||
| # Install is machine-wide (--system-level), which registers under HKLM, so look | ||
| # there first. HKCU is only a fallback for a stale user-level install. | ||
| $paths = @( | ||
| 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', | ||
| 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall', | ||
| 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall' | ||
| ) | ||
|
|
||
| $uninstall = $null | ||
| foreach ($p in $paths) { | ||
| $items = Get-ItemProperty "$p\*" -ErrorAction SilentlyContinue | Where-Object { | ||
| $_.DisplayName -eq $displayName -and $_.Publisher -eq $publisher | ||
| } | ||
| if ($items) { $uninstall = $items | Select-Object -First 1; break } | ||
| } | ||
|
|
||
| if (-not $uninstall -or (-not $uninstall.UninstallString -and -not $uninstall.QuietUninstallString)) { | ||
| Write-Host "Uninstall entry not found for '$displayName'" | ||
| Exit 0 | ||
| } | ||
|
Copilot marked this conversation as resolved.
|
||
|
|
||
| # Kill any running Vivaldi processes before uninstalling | ||
| Stop-Process -Name "vivaldi" -Force -ErrorAction SilentlyContinue | ||
| Start-Sleep -Seconds 2 | ||
|
|
||
| $uninstallCommand = if ($uninstall.QuietUninstallString) { | ||
| $uninstall.QuietUninstallString | ||
| } else { | ||
| $uninstall.UninstallString | ||
| } | ||
|
|
||
| # Parse the executable + trailing args, handling the three registry shapes: | ||
| # quoted, unquoted-with-spaces (capture through .exe), and a bare token. | ||
| if ($uninstallCommand -match '^\s*"([^"]+)"\s*(.*)$') { | ||
| $exe = $Matches[1] | ||
| $existingArgs = $Matches[2].Trim() | ||
| } elseif ($uninstallCommand -match '(?i)^\s*(.+?\.exe)\s*(.*)$') { | ||
| $exe = $Matches[1] | ||
| $existingArgs = $Matches[2].Trim() | ||
| } elseif ($uninstallCommand -match '^\s*(\S+)\s*(.*)$') { | ||
| $exe = $Matches[1] | ||
| $existingArgs = $Matches[2].Trim() | ||
| } else { | ||
| Write-Host "Unable to parse uninstall command: $uninstallCommand" | ||
| Exit 1 | ||
| } | ||
|
|
||
| # Chromium-based uninstaller flags | ||
| $uninstallArgs = "$existingArgs --uninstall --force-uninstall".Trim() | ||
|
|
||
| Write-Host "Uninstall command: $exe" | ||
| Write-Host "Uninstall args: $uninstallArgs" | ||
|
|
||
| try { | ||
| $process = Start-Process -FilePath $exe -ArgumentList $uninstallArgs -NoNewWindow -PassThru -Wait | ||
| $exitCode = $process.ExitCode | ||
| Write-Host "Uninstall exit code: $exitCode" | ||
|
|
||
| # Chromium uninstallers return 19 on success | ||
| if ($exitCode -eq 0 -or $exitCode -eq 19) { | ||
| Exit 0 | ||
| } | ||
| Exit $exitCode | ||
| } catch { | ||
| Write-Host "Error running uninstaller: $_" | ||
| Exit 1 | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| { | ||
| "name": "Vivaldi", | ||
| "slug": "vivaldi/windows", | ||
| "package_identifier": "Vivaldi.Vivaldi", | ||
| "unique_identifier": "Vivaldi", | ||
| "install_script_path": "ee/maintained-apps/inputs/winget/scripts/vivaldi_install.ps1", | ||
| "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/vivaldi_uninstall.ps1", | ||
| "installer_arch": "x64", | ||
| "installer_type": "exe", | ||
| "installer_scope": "machine", | ||
| "default_categories": ["Browsers"] | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| { | ||
| "versions": [ | ||
| { | ||
| "version": "8.0.4033.46", | ||
| "queries": { | ||
| "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.vivaldi.Vivaldi';", | ||
| "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.vivaldi.Vivaldi' AND version_compare(bundle_short_version, '8.0.4033.46') < 0);" | ||
| }, | ||
| "installer_url": "https://downloads.vivaldi.com/stable/Vivaldi.8.0.4033.46.universal.dmg", | ||
| "install_script_ref": "6a60dca7", | ||
| "uninstall_script_ref": "7c1876ca", | ||
| "sha256": "no_check", | ||
| "default_categories": [ | ||
| "Browsers" | ||
| ] | ||
| } | ||
| ], | ||
| "refs": { | ||
| "6a60dca7": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.vivaldi.Vivaldi'\nif [ -d \"$APPDIR/Vivaldi.app\" ]; then\n\tsudo mv \"$APPDIR/Vivaldi.app\" \"$TMPDIR/Vivaldi.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Vivaldi.app\" \"$APPDIR\"\nrelaunch_application 'com.vivaldi.Vivaldi'\n", | ||
| "7c1876ca": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.vivaldi.Vivaldi'\nsudo rm -rf \"$APPDIR/Vivaldi.app\"\ntrash $LOGGED_IN_USER '/Library/Logs/DiagnosticReports/Vivaldi Helper (Renderer)_*.diag'\ntrash $LOGGED_IN_USER '/Library/Logs/DiagnosticReports/Vivaldi_*.diag'\ntrash $LOGGED_IN_USER '~/Library/Application Support/CrashReporter/Vivaldi_*.plist'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Vivaldi'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.vivaldi.Vivaldi'\ntrash $LOGGED_IN_USER '~/Library/Caches/Vivaldi'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.vivaldi.Vivaldi'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.vivaldi.Vivaldi.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.vivaldi.Vivaldi.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.vivaldi.Vivaldi'\n" | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| { | ||
| "versions": [ | ||
| { | ||
| "version": "8.0.4033.46", | ||
| "queries": { | ||
| "exists": "SELECT 1 FROM programs WHERE name = 'Vivaldi' AND publisher = 'Vivaldi Technologies AS.';", | ||
| "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Vivaldi' AND publisher = 'Vivaldi Technologies AS.' AND version_compare(version, '8.0.4033.46') < 0);" | ||
| }, | ||
| "installer_url": "https://downloads.vivaldi.com/stable/Vivaldi.8.0.4033.46.x64.exe", | ||
| "install_script_ref": "d5d49757", | ||
| "uninstall_script_ref": "7b14fec4", | ||
| "sha256": "35ab32e990973e1896df8587f68b480fb4d89512030e9228d0ec39b3cda1b958", | ||
| "default_categories": [ | ||
| "Browsers" | ||
| ] | ||
| } | ||
| ], | ||
| "refs": { | ||
| "7b14fec4": "# Uninstall Vivaldi (machine-wide Chromium-based browser).\n# Looks up the uninstall entry under HKLM (machine install) with an HKCU\n# fallback, then runs the Chromium uninstaller with --force-uninstall.\n\n$displayName = \"Vivaldi\"\n$publisher = \"Vivaldi Technologies AS.\"\n\n# Install is machine-wide (--system-level), which registers under HKLM, so look\n# there first. HKCU is only a fallback for a stale user-level install.\n$paths = @(\n 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall',\n 'HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall',\n 'HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall'\n)\n\n$uninstall = $null\nforeach ($p in $paths) {\n $items = Get-ItemProperty \"$p\\*\" -ErrorAction SilentlyContinue | Where-Object {\n $_.DisplayName -eq $displayName -and $_.Publisher -eq $publisher\n }\n if ($items) { $uninstall = $items | Select-Object -First 1; break }\n}\n\nif (-not $uninstall -or (-not $uninstall.UninstallString -and -not $uninstall.QuietUninstallString)) {\n Write-Host \"Uninstall entry not found for '$displayName'\"\n Exit 1\n}\n\n# Kill any running Vivaldi processes before uninstalling\nStop-Process -Name \"vivaldi\" -Force -ErrorAction SilentlyContinue\nStart-Sleep -Seconds 2\n\n$uninstallCommand = if ($uninstall.QuietUninstallString) {\n $uninstall.QuietUninstallString\n} else {\n $uninstall.UninstallString\n}\n\n# Parse the executable + trailing args, handling the three registry shapes:\n# quoted, unquoted-with-spaces (capture through .exe), and a bare token.\nif ($uninstallCommand -match '^\\s*\"([^\"]+)\"\\s*(.*)$') {\n $exe = $Matches[1]\n $existingArgs = $Matches[2].Trim()\n} elseif ($uninstallCommand -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') {\n $exe = $Matches[1]\n $existingArgs = $Matches[2].Trim()\n} elseif ($uninstallCommand -match '^\\s*(\\S+)\\s*(.*)$') {\n $exe = $Matches[1]\n $existingArgs = $Matches[2].Trim()\n} else {\n Write-Host \"Unable to parse uninstall command: $uninstallCommand\"\n Exit 1\n}\n\n# Chromium-based uninstaller flags\n$uninstallArgs = \"$existingArgs --uninstall --force-uninstall\".Trim()\n\nWrite-Host \"Uninstall command: $exe\"\nWrite-Host \"Uninstall args: $uninstallArgs\"\n\ntry {\n $process = Start-Process -FilePath $exe -ArgumentList $uninstallArgs -NoNewWindow -PassThru -Wait\n $exitCode = $process.ExitCode\n Write-Host \"Uninstall exit code: $exitCode\"\n\n # Chromium uninstallers return 19 on success\n if ($exitCode -eq 0 -or $exitCode -eq 19) {\n Exit 0\n }\n Exit $exitCode\n} catch {\n Write-Host \"Error running uninstaller: $_\"\n Exit 1\n}\n", | ||
| "d5d49757": "# Install Vivaldi silently, machine-wide (Chromium-based browser).\n# Fleet runs installs as SYSTEM, so --system-level is required to install for\n# all users under %ProgramFiles% (and register under HKLM). Without it the\n# installer lands in the SYSTEM profile and is invisible to the real user.\n$process = Start-Process -FilePath $env:INSTALLER_PATH `\n -ArgumentList \"--vivaldi-silent --do-not-launch-chrome --system-level\" `\n -NoNewWindow -PassThru -Wait\nExit $process.ExitCode\n" | ||
| } | ||
| } |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.