Skip to content

Update Fleet-maintained apps - #50537

Closed
fleet-release wants to merge 1 commit into
mainfrom
fma-2608042028
Closed

Update Fleet-maintained apps#50537
fleet-release wants to merge 1 commit into
mainfrom
fma-2608042028

Conversation

@fleet-release

@fleet-release fleet-release commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Automated ingestion of latest Fleet-maintained app data.

Summary by CodeRabbit

  • New Versions

    • Updated release metadata, download links, checksums, and version detection for numerous Windows and macOS applications, including 8x8 Work, Adobe products, Firefox, Docker, Microsoft Teams, Tailscale, and Zoom.
    • Added the latest installer packages for many applications, ensuring deployments use current releases.
  • Bug Fixes

    • Improved Windows MSI installation handling across many applications.
    • Installations now correctly recognize successful completion, including cases requiring a reboot, while preserving genuine failure reporting.
    • Corrected installer log-path quoting for more reliable installation logging.

Generated automatically with cmd/maintained-apps.
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/1password/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.RjAMmO	2026-08-04 20:37:24.928924766 +0000
+++ /tmp/new.JuGhj8	2026-08-04 20:37:24.928924766 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/7-zip/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.aQHIo1	2026-08-04 20:37:24.999926735 +0000
+++ /tmp/new.foCxng	2026-08-04 20:37:24.999926735 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/8x8-work/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/8x8-work/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.RTBjXZ	2026-08-04 20:37:25.104929647 +0000
+++ /tmp/new.Jkzd1r	2026-08-04 20:37:25.104929647 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/adobe-acrobat-pro/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/adobe-acrobat-reader/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/adobe-dng-converter/darwin.json

=== Install // b175e533 -> ac06e091 ===

--- /tmp/old.hNRAlf	2026-08-04 20:37:25.263934056 +0000
+++ /tmp/new.8eeBhC	2026-08-04 20:37:25.263934056 +0000
@@ -101,5 +101,5 @@
 hdiutil detach "$MOUNT_POINT" || true
 # install pkg files
 quit_and_track_application 'com.adobe.DNGConverter'
-sudo installer -pkg "$TMPDIR/DNGConverter_18_4_1.pkg" -target / || exit $?
+sudo installer -pkg "$TMPDIR/DNGConverter_18_5.pkg" -target / || exit $?
 relaunch_application 'com.adobe.DNGConverter'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/advanced-installer/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Tv3Xu7	2026-08-04 20:37:25.333935997 +0000
+++ /tmp/new.8zFl9I	2026-08-04 20:37:25.333935997 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/advanced-renamer/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/aircall/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.GMVeU1	2026-08-04 20:37:25.446939131 +0000
+++ /tmp/new.IsG56I	2026-08-04 20:37:25.446939131 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/airparrot/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.FdIzwX	2026-08-04 20:37:25.515941045 +0000
+++ /tmp/new.tft1YD	2026-08-04 20:37:25.515941045 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/airtame/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/alacritty/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.r56ztK	2026-08-04 20:37:25.648944733 +0000
+++ /tmp/new.CRmHbf	2026-08-04 20:37:25.648944733 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/alfaview/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.UnvKIF	2026-08-04 20:37:25.706946341 +0000
+++ /tmp/new.vHRzA3	2026-08-04 20:37:25.707946369 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/allway-sync/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.G7Yybn	2026-08-04 20:37:25.767948033 +0000
+++ /tmp/new.2ZlTAy	2026-08-04 20:37:25.767948033 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-corretto-11/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.j3MHfm	2026-08-04 20:37:25.822949558 +0000
+++ /tmp/new.4Uxxah	2026-08-04 20:37:25.822949558 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-corretto-17/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Kspl1R	2026-08-04 20:37:25.876951056 +0000
+++ /tmp/new.TSThXl	2026-08-04 20:37:25.876951056 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-corretto-21/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.2JQaH2	2026-08-04 20:37:25.933952637 +0000
+++ /tmp/new.1iZSyw	2026-08-04 20:37:25.933952637 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-corretto-24/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.O8t4JO	2026-08-04 20:37:26.004954606 +0000
+++ /tmp/new.Wr9MO2	2026-08-04 20:37:26.004954606 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-corretto-25/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.iC47ND	2026-08-04 20:37:26.058956103 +0000
+++ /tmp/new.XKWBhJ	2026-08-04 20:37:26.058956103 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-corretto-26/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Nhbs4L	2026-08-04 20:37:26.113957628 +0000
+++ /tmp/new.byRUEZ	2026-08-04 20:37:26.113957628 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-corretto-8/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.NaZCS2	2026-08-04 20:37:26.170959209 +0000
+++ /tmp/new.QcAuV5	2026-08-04 20:37:26.171959237 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-corretto-jre-8/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.BCalnM	2026-08-04 20:37:26.225960735 +0000
+++ /tmp/new.T30WKb	2026-08-04 20:37:26.226960762 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-dcv-client/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.USJgRc	2026-08-04 20:37:26.296962703 +0000
+++ /tmp/new.yR8CnL	2026-08-04 20:37:26.297962731 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-dcv-server/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.L8TyZ7	2026-08-04 20:37:26.368964700 +0000
+++ /tmp/new.bgciGl	2026-08-04 20:37:26.368964700 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-redshift-odbc-driver/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Ql6ULK	2026-08-04 20:37:26.430966419 +0000
+++ /tmp/new.ymWJjx	2026-08-04 20:37:26.430966419 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/amazon-workspaces/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Yn7HOk	2026-08-04 20:37:26.501968388 +0000
+++ /tmp/new.FDDmvD	2026-08-04 20:37:26.501968388 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/apidog/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/aptakube/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Byhvfw	2026-08-04 20:37:26.592970912 +0000
+++ /tmp/new.C37veN	2026-08-04 20:37:26.592970912 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/arduino-ide/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.12fnMg	2026-08-04 20:37:26.666972964 +0000
+++ /tmp/new.h1I8id	2026-08-04 20:37:26.667972992 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/asana/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/audiveris/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.63qcJE	2026-08-04 20:37:26.764975682 +0000
+++ /tmp/new.2Z1y7H	2026-08-04 20:37:26.764975682 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/autopsy/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.JaVdNT	2026-08-04 20:37:26.832977568 +0000
+++ /tmp/new.NUuqPn	2026-08-04 20:37:26.832977568 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/aws-cli/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.ueSVJE	2026-08-04 20:37:26.883978982 +0000
+++ /tmp/new.cAubZa	2026-08-04 20:37:26.883978982 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/aws-sam-cli/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.HNKKqY	2026-08-04 20:37:26.934980396 +0000
+++ /tmp/new.Ry9yrc	2026-08-04 20:37:26.934980396 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/aws-vpn-client/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.x0EdhP	2026-08-04 20:37:26.988981894 +0000
+++ /tmp/new.bkINxO	2026-08-04 20:37:26.988981894 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/azul-zulu-25-jdk/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.DgOqkw	2026-08-04 20:37:27.044983447 +0000
+++ /tmp/new.mMA49w	2026-08-04 20:37:27.044983447 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/azul-zulu-25-jre/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.vZQZEx	2026-08-04 20:37:27.098984945 +0000
+++ /tmp/new.Z6a6cu	2026-08-04 20:37:27.098984945 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/azure-functions-core-tools/windows.json

=== Install // 42c7791f -> 49fc2740 ===

--- /tmp/old.29TCqT	2026-08-04 20:37:27.160986664 +0000
+++ /tmp/new.ZeIsqb	2026-08-04 20:37:27.160986664 +0000
@@ -11,7 +11,7 @@
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} ALLUSERS=1 /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" ALLUSERS=1 /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/betterzip/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/beyond-compare/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/beyond-compare/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/bitwig-studio/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Qi6S7Z	2026-08-04 20:37:27.401993347 +0000
+++ /tmp/new.AlJjUm	2026-08-04 20:37:27.401993347 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/blender/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.3sWAUz	2026-08-04 20:37:27.470995261 +0000
+++ /tmp/new.Uq7yZY	2026-08-04 20:37:27.470995261 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/bluej/windows.json

=== Install // 29a9338f -> 85459eac ===

--- /tmp/old.Nx5wKr	2026-08-04 20:37:27.535997063 +0000
+++ /tmp/new.yQnbUX	2026-08-04 20:37:27.535997063 +0000
@@ -7,7 +7,7 @@
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`" ALLUSERS=2" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`" ALLUSERS=2" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/box-drive/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.FosOnQ	2026-08-04 20:37:27.593998672 +0000
+++ /tmp/new.NxieRA	2026-08-04 20:37:27.594998699 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/box-tools/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.7zgeLD	2026-08-04 20:37:27.651000252 +0000
+++ /tmp/new.yhC3gN	2026-08-04 20:37:27.651000252 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/browserstacklocal/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.cD7VwT	2026-08-04 20:37:27.706001778 +0000
+++ /tmp/new.xRfy69	2026-08-04 20:37:27.707001805 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/bruno/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Bagegh	2026-08-04 20:37:27.763003358 +0000
+++ /tmp/new.CPoC4G	2026-08-04 20:37:27.763003358 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/calibre/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.I3mGbQ	2026-08-04 20:37:27.815004800 +0000
+++ /tmp/new.N9a9k2	2026-08-04 20:37:27.815004800 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/camtasia/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.tDcn01	2026-08-04 20:37:27.874006437 +0000
+++ /tmp/new.dJZok6	2026-08-04 20:37:27.874006437 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/charles/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/chef-workstation/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.U87uY7	2026-08-04 20:37:27.968009043 +0000
+++ /tmp/new.mLlxSO	2026-08-04 20:37:27.968009043 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cherry-keys/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.yImpSU	2026-08-04 20:37:28.039011013 +0000
+++ /tmp/new.TFbjIG	2026-08-04 20:37:28.039011013 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/chrome-remote-desktop/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.6fHxw7	2026-08-04 20:37:28.099012676 +0000
+++ /tmp/new.5zfzbD	2026-08-04 20:37:28.099012676 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cinc/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Kvc86b	2026-08-04 20:37:28.173014728 +0000
+++ /tmp/new.uNArWu	2026-08-04 20:37:28.173014728 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cisco-jabber/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.qIA0fg	2026-08-04 20:37:28.230016309 +0000
+++ /tmp/new.Rovzxd	2026-08-04 20:37:28.231016337 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cisco-webex-recorder-and-player/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.1sq9Td	2026-08-04 20:37:28.292018029 +0000
+++ /tmp/new.NDB38g	2026-08-04 20:37:28.292018029 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/claude/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/clickup/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.bLiYBq	2026-08-04 20:37:28.384020580 +0000
+++ /tmp/new.4gRUpa	2026-08-04 20:37:28.384020580 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/clockassist/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.u74H0l	2026-08-04 20:37:28.445022272 +0000
+++ /tmp/new.7aKVce	2026-08-04 20:37:28.446022299 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/clockify/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.ShTUBG	2026-08-04 20:37:28.500023797 +0000
+++ /tmp/new.NGXLqj	2026-08-04 20:37:28.500023797 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cloudflare-warp/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.JEJLIw	2026-08-04 20:37:28.555025322 +0000
+++ /tmp/new.TIKE3R	2026-08-04 20:37:28.555025322 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cmake-app/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.AlYfNm	2026-08-04 20:37:28.606026736 +0000
+++ /tmp/new.GHLWNg	2026-08-04 20:37:28.606026736 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/codemeter-runtime-kit/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/codexbar/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/colour-contrast-analyser/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.lzLPoC	2026-08-04 20:37:28.758030952 +0000
+++ /tmp/new.UgH8ol	2026-08-04 20:37:28.759030979 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/crashplan/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.UPvqH6	2026-08-04 20:37:28.811032422 +0000
+++ /tmp/new.uQTQSr	2026-08-04 20:37:28.812032449 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/creative-force-kelvin/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.bbJhKi	2026-08-04 20:37:28.859033753 +0000
+++ /tmp/new.Cevtxd	2026-08-04 20:37:28.859033753 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/crestron-airmedia-peripherals/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.htET5t	2026-08-04 20:37:28.918035389 +0000
+++ /tmp/new.ZnoTT4	2026-08-04 20:37:28.918035389 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/crestron-airmedia/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.hMWWBD	2026-08-04 20:37:28.977037025 +0000
+++ /tmp/new.FYUTvr	2026-08-04 20:37:28.977037025 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cribl-edge/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.aLbdLG	2026-08-04 20:37:29.032038550 +0000
+++ /tmp/new.sPn8IH	2026-08-04 20:37:29.032038550 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/crisisgo/windows.json

=== Install // 27b04e7a -> 01aaef68 ===

--- /tmp/old.uEw2TH	2026-08-04 20:37:29.094040270 +0000
+++ /tmp/new.00AJYf	2026-08-04 20:37:29.094040270 +0000
@@ -11,7 +11,7 @@
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} ISSETUPDRIVEN=1 /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" ISSETUPDRIVEN=1 /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cryptomator/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.W3hPTH	2026-08-04 20:37:29.159042072 +0000
+++ /tmp/new.qwWBQ3	2026-08-04 20:37:29.159042072 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cursor/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cyberduck-cli/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.FMlYbZ	2026-08-04 20:37:29.255044735 +0000
+++ /tmp/new.34uUbh	2026-08-04 20:37:29.255044735 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cyberduck/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cyberduck/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.1aAqgD	2026-08-04 20:37:29.356047536 +0000
+++ /tmp/new.Ig3931	2026-08-04 20:37:29.356047536 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/db-browser-for-sqlite/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.PJOroo	2026-08-04 20:37:29.430049588 +0000
+++ /tmp/new.kStBFa	2026-08-04 20:37:29.430049588 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/dbgate/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/delinea-connection-manager/windows.json

=== Install // d3f438be -> 00512c4c ===

--- /tmp/old.a7HXn2	2026-08-04 20:37:29.542052694 +0000
+++ /tmp/new.n6J5sE	2026-08-04 20:37:29.542052694 +0000
@@ -12,7 +12,7 @@
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} ALLUSERS=1 MSIINSTALLPERUSER=`"`" /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" ALLUSERS=1 MSIINSTALLPERUSER=`"`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/devolutions-launcher/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.qlW8kJ	2026-08-04 20:37:29.600054302 +0000
+++ /tmp/new.ZynCbY	2026-08-04 20:37:29.600054302 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/devolutions-workspace/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.oGTxbk	2026-08-04 20:37:29.658055911 +0000
+++ /tmp/new.rLizjt	2026-08-04 20:37:29.658055911 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/devpod/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.NLMQB9	2026-08-04 20:37:29.718057574 +0000
+++ /tmp/new.SJgvG3	2026-08-04 20:37:29.718057574 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/digiseal-reader/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/discord/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/discord/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/dngrep/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.3yJILf	2026-08-04 20:37:29.898062566 +0000
+++ /tmp/new.XYkdW8	2026-08-04 20:37:29.898062566 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/docker/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/dot/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/downie/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/draftable-desktop/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.rRTfyD	2026-08-04 20:37:30.070067336 +0000
+++ /tmp/new.rUMNY0	2026-08-04 20:37:30.070067336 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/drawio/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/drofus/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.H7J89z	2026-08-04 20:37:30.169070082 +0000
+++ /tmp/new.XDEk2n	2026-08-04 20:37:30.169070082 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/dropbox/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.jLYhAo	2026-08-04 20:37:30.223071579 +0000
+++ /tmp/new.jiV2AD	2026-08-04 20:37:30.223071579 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/druva-insync/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.p56pU0	2026-08-04 20:37:30.288073382 +0000
+++ /tmp/new.x2v09r	2026-08-04 20:37:30.288073382 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/duo-desktop/darwin.json

=== Install // bac43c9b -> 96c63e5c ===

--- /tmp/old.3eDWer	2026-08-04 20:37:30.341074851 +0000
+++ /tmp/new.sDjlfR	2026-08-04 20:37:30.342074879 +0000
@@ -96,5 +96,5 @@
 
 # install pkg files
 quit_and_track_application 'com.duosecurity.duo-device-health'
-sudo installer -pkg "$TMPDIR/DuoDesktop-7.19.0.0.pkg" -target / || exit $?
+sudo installer -pkg "$TMPDIR/DuoDesktop-7.20.0.0.pkg" -target / || exit $?
 relaunch_application 'com.duosecurity.duo-device-health'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/duo-desktop/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.DbPvPU	2026-08-04 20:37:30.410076765 +0000
+++ /tmp/new.X5G5gu	2026-08-04 20:37:30.410076765 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/eclipse-temurin-jdk-11/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.p74L3I	2026-08-04 20:37:30.462078207 +0000
+++ /tmp/new.N1c93q	2026-08-04 20:37:30.462078207 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/eclipse-temurin-jdk-17/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.TpopYE	2026-08-04 20:37:30.515079677 +0000
+++ /tmp/new.PiHR49	2026-08-04 20:37:30.515079677 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/eclipse-temurin-jdk-21/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.2RWPGY	2026-08-04 20:37:30.581081507 +0000
+++ /tmp/new.BDHjru	2026-08-04 20:37:30.581081507 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/eclipse-temurin-jdk-8/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.gVMbAd	2026-08-04 20:37:30.631082894 +0000
+++ /tmp/new.yZS2b4	2026-08-04 20:37:30.631082894 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/eclipse-temurin-jre-11/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.GZKhZu	2026-08-04 20:37:30.682084308 +0000
+++ /tmp/new.tmuYrM	2026-08-04 20:37:30.683084336 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/eclipse-temurin-jre-17/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.nkghuk	2026-08-04 20:37:30.732085695 +0000
+++ /tmp/new.TOG0Y9	2026-08-04 20:37:30.732085695 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/eclipse-temurin-jre-21/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.G5dWia	2026-08-04 20:37:30.784087137 +0000
+++ /tmp/new.anBlhs	2026-08-04 20:37:30.784087137 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/eclipse-temurin-jre-8/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Jf1p9Z	2026-08-04 20:37:30.834088523 +0000
+++ /tmp/new.b0URIr	2026-08-04 20:37:30.834088523 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/egnyte-webedit/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Nj0PyU	2026-08-04 20:37:30.894090187 +0000
+++ /tmp/new.Ei1kUJ	2026-08-04 20:37:30.894090187 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/elevate-uc/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.16gQVN	2026-08-04 20:37:30.953091823 +0000
+++ /tmp/new.HwKGYn	2026-08-04 20:37:30.953091823 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/elgato-control-center/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Rny9Cj	2026-08-04 20:37:31.029093931 +0000
+++ /tmp/new.jBZXAI	2026-08-04 20:37:31.029093931 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/elgato-stream-deck/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.r5iJC3	2026-08-04 20:37:31.082095401 +0000
+++ /tmp/new.lsIT55	2026-08-04 20:37:31.082095401 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/emclient/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.ZF2kSv	2026-08-04 20:37:31.133096815 +0000
+++ /tmp/new.YSNHCL	2026-08-04 20:37:31.134096843 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/endnote/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.XJLiQD	2026-08-04 20:37:31.202098729 +0000
+++ /tmp/new.ihiM2l	2026-08-04 20:37:31.202098729 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/epic-games/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.ycKRrK	2026-08-04 20:37:31.264100448 +0000
+++ /tmp/new.VJ7Hyw	2026-08-04 20:37:31.264100448 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/exifcleaner/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/filebeat/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.FyZvGT	2026-08-04 20:37:31.354102944 +0000
+++ /tmp/new.gPfWoV	2026-08-04 20:37:31.354102944 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/firefox/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/firefox/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/firefox@developer-edition/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/firefox@nightly/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/flexwhere/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.lOatQd	2026-08-04 20:37:31.562108712 +0000
+++ /tmp/new.k55M5V	2026-08-04 20:37:31.562108712 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/fortify/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.eXsXtl	2026-08-04 20:37:31.624110432 +0000
+++ /tmp/new.nfivoy	2026-08-04 20:37:31.624110432 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/genesys-cloud/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/genesys-cloud/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.zFPDdu	2026-08-04 20:37:31.728113316 +0000
+++ /tmp/new.QUD9hL	2026-08-04 20:37:31.728113316 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/geogebra-classic/windows.json

=== Install // ebe19da8 -> d43086d9 ===

--- /tmp/old.CD1Pv3	2026-08-04 20:37:31.783114841 +0000
+++ /tmp/new.vvJHfC	2026-08-04 20:37:31.783114841 +0000
@@ -10,7 +10,7 @@
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/git-extensions/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.2A7GPc	2026-08-04 20:37:31.837116338 +0000
+++ /tmp/new.p7FfIa	2026-08-04 20:37:31.837116338 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/github-desktop/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.2wKLhh	2026-08-04 20:37:31.898118030 +0000
+++ /tmp/new.S3xlhf	2026-08-04 20:37:31.898118030 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/go/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.RCZbcv	2026-08-04 20:37:31.959119722 +0000
+++ /tmp/new.XhBtPg	2026-08-04 20:37:31.959119722 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/google-ads-editor/windows.json

=== Install // bdccfcda -> 351845b5 ===

--- /tmp/old.82NcPp	2026-08-04 20:37:32.010121133 +0000
+++ /tmp/new.zZ6TvU	2026-08-04 20:37:32.010121133 +0000
@@ -11,7 +11,7 @@
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} ALLUSERS=1 /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" ALLUSERS=1 /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/google-chrome/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.qMSTcH	2026-08-04 20:37:32.061122541 +0000
+++ /tmp/new.IMfztU	2026-08-04 20:37:32.062122568 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/google-credential-provider-for-windows/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.X9I7OY	2026-08-04 20:37:32.124124280 +0000
+++ /tmp/new.G97Ahm	2026-08-04 20:37:32.124124280 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/gotomeeting/windows.json

=== Install // 36ce6af0 -> a6c7d24e ===

--- /tmp/old.nymYwR	2026-08-04 20:37:32.207126571 +0000
+++ /tmp/new.IetnQh	2026-08-04 20:37:32.207126571 +0000
@@ -8,7 +8,7 @@
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`" G2MINSTALLFORALLUSERS=1" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`" G2MINSTALLFORALLUSERS=1" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/grammarly-desktop/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/granola/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/grepwin/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.cMkHmB	2026-08-04 20:37:32.339130215 +0000
+++ /tmp/new.5LzYPW	2026-08-04 20:37:32.339130215 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/home-assistant/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/hwmonitor/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ibm-semeru-jdk-11/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.QliuCx	2026-08-04 20:37:32.466133721 +0000
+++ /tmp/new.TCAhGE	2026-08-04 20:37:32.466133721 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ibm-semeru-jdk-17/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.s03ajH	2026-08-04 20:37:32.518135156 +0000
+++ /tmp/new.1UPQKN	2026-08-04 20:37:32.518135156 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ibm-semeru-jdk-21/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.PWCBpi	2026-08-04 20:37:32.569136564 +0000
+++ /tmp/new.I5qfu5	2026-08-04 20:37:32.569136564 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ibm-semeru-jdk-8/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.ZL0nuj	2026-08-04 20:37:32.620137972 +0000
+++ /tmp/new.Na0mc0	2026-08-04 20:37:32.621137999 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ibm-semeru-jre-11/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.f0Tye4	2026-08-04 20:37:32.677139545 +0000
+++ /tmp/new.7uIrWX	2026-08-04 20:37:32.677139545 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ibm-semeru-jre-17/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.N87X4S	2026-08-04 20:37:32.728140953 +0000
+++ /tmp/new.MiT5wg	2026-08-04 20:37:32.728140953 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ibm-semeru-jre-21/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.fHhNuH	2026-08-04 20:37:32.779142361 +0000
+++ /tmp/new.4Dq5Ia	2026-08-04 20:37:32.779142361 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ibm-semeru-jre-8/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.nEEfGD	2026-08-04 20:37:32.829143741 +0000
+++ /tmp/new.xgFCNQ	2026-08-04 20:37:32.829143741 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/imageglass/windows.json

=== Install // e7eaf6bb -> 72349997 ===

--- /tmp/old.Ta2vHU	2026-08-04 20:37:32.880145149 +0000
+++ /tmp/new.nRKgxg	2026-08-04 20:37:32.881145177 +0000
@@ -9,7 +9,7 @@
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} ALLUSERS=1 /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" ALLUSERS=1 /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/imhex/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.2X1pnE	2026-08-04 20:37:32.954147192 +0000
+++ /tmp/new.EczTEl	2026-08-04 20:37:32.954147192 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/inkscape/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.dSheo1	2026-08-04 20:37:33.032149345 +0000
+++ /tmp/new.IK2aym	2026-08-04 20:37:33.032149345 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ironpython/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Sj64hg	2026-08-04 20:37:33.087150863 +0000
+++ /tmp/new.V33mKs	2026-08-04 20:37:33.087150863 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/jami/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.d8gPid	2026-08-04 20:37:33.161152906 +0000
+++ /tmp/new.azGR2x	2026-08-04 20:37:33.161152906 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/jetbrains-toolbox/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/jetbrains-toolbox/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/keepassxc/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.8YwKXy	2026-08-04 20:37:33.315157157 +0000
+++ /tmp/new.D8m6ub	2026-08-04 20:37:33.315157157 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/lapce/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.JssSxT	2026-08-04 20:37:33.388159172 +0000
+++ /tmp/new.Spv9nO	2026-08-04 20:37:33.389159200 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/lastpass/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.zI08KB	2026-08-04 20:37:33.449160856 +0000
+++ /tmp/new.YgdQKb	2026-08-04 20:37:33.449160856 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/libreoffice/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.dVzp7A	2026-08-04 20:37:33.503162347 +0000
+++ /tmp/new.QrlTZL	2026-08-04 20:37:33.503162347 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/linear/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/linear/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/lookaway/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/loom/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/loom/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/macwhisper/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/marked-app/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/mattermost/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.lT90xS	2026-08-04 20:37:33.853172009 +0000
+++ /tmp/new.GFvpfK	2026-08-04 20:37:33.853172009 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/microsoft-365-copilot/darwin.json

=== Install // 49bf2ee3 -> 0be42f66 ===

--- /tmp/old.sxK2Xn	2026-08-04 20:37:33.913173665 +0000
+++ /tmp/new.FrSwA8	2026-08-04 20:37:33.913173665 +0000
@@ -117,6 +117,6 @@
 
 EOF
 
-sudo installer -pkg "$TMPDIR/Microsoft_365_Copilot_universal_1.2607.2001_Installer.pkg" -target / -applyChoiceChangesXML "$CHOICE_XML" || exit $?
+sudo installer -pkg "$TMPDIR/Microsoft_365_Copilot_universal_1.2607.2701_Installer.pkg" -target / -applyChoiceChangesXML "$CHOICE_XML" || exit $?
 
 relaunch_application 'com.microsoft.m365copilot'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/microsoft-edge/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.vacFCQ	2026-08-04 20:37:33.964175073 +0000
+++ /tmp/new.PKRI2r	2026-08-04 20:37:33.964175073 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/microsoft-teams/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/microsoft-teams/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/miro/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/mixxx/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.5MsaCS	2026-08-04 20:37:34.163180566 +0000
+++ /tmp/new.ZkB9Bb	2026-08-04 20:37:34.163180566 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/mongodb-compass/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.RpI2UG	2026-08-04 20:37:34.225182278 +0000
+++ /tmp/new.y7hgrL	2026-08-04 20:37:34.225182278 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/mysqlworkbench/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.9h3N3J	2026-08-04 20:37:34.306184514 +0000
+++ /tmp/new.qXGjbT	2026-08-04 20:37:34.306184514 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/naps2/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.hEIlwd	2026-08-04 20:37:34.361186032 +0000
+++ /tmp/new.UG7BXO	2026-08-04 20:37:34.361186032 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/nessus-agent/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.M0esQY	2026-08-04 20:37:34.417187578 +0000
+++ /tmp/new.aV6TBN	2026-08-04 20:37:34.417187578 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/nextcloud/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.RpVaoC	2026-08-04 20:37:34.470189041 +0000
+++ /tmp/new.2bI4Eq	2026-08-04 20:37:34.470189041 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/nodejs/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.hbIShm	2026-08-04 20:37:34.522190477 +0000
+++ /tmp/new.XSMDye	2026-08-04 20:37:34.523190504 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/notepadexe/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/notion/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/notion/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/nudge/darwin.json

=== Install // ac39d8ab -> aa291dac ===

--- /tmp/old.iwNcTl	2026-08-04 20:37:34.700195390 +0000
+++ /tmp/new.OZXFlP	2026-08-04 20:37:34.700195390 +0000
@@ -96,5 +96,5 @@
 
 # install pkg files
 quit_and_track_application 'com.github.macadmins.Nudge'
-sudo installer -pkg "$TMPDIR/Nudge-2.1.2.81856.pkg" -target / || exit $?
+sudo installer -pkg "$TMPDIR/Nudge-2.1.3.81860.pkg" -target / || exit $?
 relaunch_application 'com.github.macadmins.Nudge'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/omnifocus/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/opencode-desktop/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/openvpn-connect/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.NPB4DA	2026-08-04 20:37:34.856199697 +0000
+++ /tmp/new.79Znn3	2026-08-04 20:37:34.856199697 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/origami-studio/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/p4v/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.RwHHSx	2026-08-04 20:37:34.962202623 +0000
+++ /tmp/new.KW80jm	2026-08-04 20:37:34.962202623 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/pale-moon/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/pdfsam-basic/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.exaJBt	2026-08-04 20:37:35.062205383 +0000
+++ /tmp/new.XzE0jX	2026-08-04 20:37:35.062205383 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/plex-media-server/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/postman/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/powershell/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.6poC63	2026-08-04 20:37:35.190208917 +0000
+++ /tmp/new.bx8CvO	2026-08-04 20:37:35.191208944 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/prisma-browser/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.MnomUZ	2026-08-04 20:37:35.241210325 +0000
+++ /tmp/new.NdGi0I	2026-08-04 20:37:35.241210325 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/putty/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.gWB2Yu	2026-08-04 20:37:35.324212616 +0000
+++ /tmp/new.Mwb2CK	2026-08-04 20:37:35.324212616 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/quip/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/rectangle-pro/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/reflector/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.RLwm1v	2026-08-04 20:37:35.475216784 +0000
+++ /tmp/new.XHRDwe	2026-08-04 20:37:35.475216784 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/remote-desktop-manager/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.PIKs2J	2026-08-04 20:37:35.533218385 +0000
+++ /tmp/new.U8OOWo	2026-08-04 20:37:35.533218385 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/rewritebar/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/rider/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/royal-tsx/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.iaIyOr	2026-08-04 20:37:35.666222057 +0000
+++ /tmp/new.YsmodR	2026-08-04 20:37:35.666222057 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/santa/darwin.json

=== Install // e01d4393 -> a542a793 ===

--- /tmp/old.PgG4vr	2026-08-04 20:37:35.721223575 +0000
+++ /tmp/new.M5WYhq	2026-08-04 20:37:35.721223575 +0000
@@ -101,5 +101,5 @@
 hdiutil detach "$MOUNT_POINT" || true
 # install pkg files
 quit_and_track_application 'com.northpolesec.santa'
-sudo installer -pkg "$TMPDIR/santa-2026.6.pkg" -target / || exit $?
+sudo installer -pkg "$TMPDIR/santa-2026.7.pkg" -target / || exit $?
 relaunch_application 'com.northpolesec.santa'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/shapr3d/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/sharefile/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.OXJD1D	2026-08-04 20:37:35.837226777 +0000
+++ /tmp/new.jMe7pI	2026-08-04 20:37:35.838226805 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/snagit/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.vhQEoO	2026-08-04 20:37:35.923229151 +0000
+++ /tmp/new.I1uhub	2026-08-04 20:37:35.923229151 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/sonicwall-netextender/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.336pKd	2026-08-04 20:37:35.977230642 +0000
+++ /tmp/new.b9OwGh	2026-08-04 20:37:35.978230669 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/sourcetree/windows.json

=== Install // 17f62246 -> e23ea804 ===

--- /tmp/old.DJANRo	2026-08-04 20:37:36.062232988 +0000
+++ /tmp/new.PlsmWl	2026-08-04 20:37:36.063233016 +0000
@@ -3,7 +3,7 @@
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`" ACCEPTEULA=1" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`" ACCEPTEULA=1" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/spotify/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/superwhisper/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/tailscale-app/darwin.json

=== Install // e568557b -> 6301b666 ===

--- /tmp/old.xS94hK	2026-08-04 20:37:36.202236853 +0000
+++ /tmp/new.pP3j8o	2026-08-04 20:37:36.202236853 +0000
@@ -96,5 +96,5 @@
 
 # install pkg files
 quit_and_track_application 'io.tailscale.ipn.macsys'
-sudo installer -pkg "$TMPDIR/Tailscale-1.98.10-macos.pkg" -target / || exit $?
+sudo installer -pkg "$TMPDIR/Tailscale-1.102.1-macos.pkg" -target / || exit $?
 relaunch_application 'io.tailscale.ipn.macsys'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/tailscale/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.iQ38Ml	2026-08-04 20:37:36.257238371 +0000
+++ /tmp/new.OLtI2i	2026-08-04 20:37:36.257238371 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/textexpander/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.dJb0ZM	2026-08-04 20:37:36.320240110 +0000
+++ /tmp/new.jr6VcV	2026-08-04 20:37:36.321240138 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/thunderbird/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/thunderbird/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/tightvnc/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.3ttbag	2026-08-04 20:37:36.454243809 +0000
+++ /tmp/new.Mdanl6	2026-08-04 20:37:36.454243809 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/todoist-app/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/todoist-app/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/topaz-gigapixel-ai/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Z4qyZL	2026-08-04 20:37:36.628248612 +0000
+++ /tmp/new.1PJki8	2026-08-04 20:37:36.629248640 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/topaz-photo-ai/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Exa5wk	2026-08-04 20:37:36.709250849 +0000
+++ /tmp/new.yRtgmV	2026-08-04 20:37:36.710250876 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/tortoisegit/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.A5lf39	2026-08-04 20:37:36.781252836 +0000
+++ /tmp/new.eXKT3S	2026-08-04 20:37:36.781252836 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/tower/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.JeeUli	2026-08-04 20:37:36.844254575 +0000
+++ /tmp/new.Bntykg	2026-08-04 20:37:36.844254575 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/transmission/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.KpTs5l	2026-08-04 20:37:36.908256342 +0000
+++ /tmp/new.IpjVxk	2026-08-04 20:37:36.909256370 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/trezor-suite/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/twingate/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.kQhKhy	2026-08-04 20:37:37.028259654 +0000
+++ /tmp/new.j2T1HD	2026-08-04 20:37:37.028259654 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/typeface/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ultimaker-cura/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.jM04gl	2026-08-04 20:37:37.146262912 +0000
+++ /tmp/new.US1POq	2026-08-04 20:37:37.146262912 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/vlc/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.cyR4ze	2026-08-04 20:37:37.243265590 +0000
+++ /tmp/new.7ctrgb	2026-08-04 20:37:37.243265590 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/wave/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.0pNJC7	2026-08-04 20:37:37.325267853 +0000
+++ /tmp/new.5pNarL	2026-08-04 20:37:37.325267853 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/weasis/darwin.json

=== Install // e404586c -> 61706202 ===

--- /tmp/old.mxa6wx	2026-08-04 20:37:37.379269344 +0000
+++ /tmp/new.5cwowU	2026-08-04 20:37:37.380269371 +0000
@@ -96,5 +96,5 @@
 
 # install pkg files
 quit_and_track_application 'org.weasis.launcher'
-sudo installer -pkg "$TMPDIR/Weasis-4.7.1-aarch64.pkg" -target / || exit $?
+sudo installer -pkg "$TMPDIR/Weasis-4.7.2-aarch64.pkg" -target / || exit $?
 relaunch_application 'org.weasis.launcher'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/weasis/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.8wu0kA	2026-08-04 20:37:37.445271166 +0000
+++ /tmp/new.TPZPkU	2026-08-04 20:37:37.446271193 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/webex/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.vcCIGS	2026-08-04 20:37:37.517273153 +0000
+++ /tmp/new.Cc9JNP	2026-08-04 20:37:37.517273153 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/whatsapp/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/windirstat/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.UNHMjq	2026-08-04 20:37:37.605275583 +0000
+++ /tmp/new.X8mN9C	2026-08-04 20:37:37.606275610 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/windows-app/darwin.json

=== Install // 333033b1 -> 78ca7433 ===

--- /tmp/old.YvlNyo	2026-08-04 20:37:37.661277128 +0000
+++ /tmp/new.6cZUdw	2026-08-04 20:37:37.661277128 +0000
@@ -96,5 +96,5 @@
 
 # install pkg files
 quit_and_track_application 'com.microsoft.rdc.macos'
-sudo installer -pkg "$TMPDIR/Windows_App_11.3.7_installer.pkg" -target / || exit $?
+sudo installer -pkg "$TMPDIR/Windows_App_11.3.8_installer.pkg" -target / || exit $?
 relaunch_application 'com.microsoft.rdc.macos'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/winlogbeat/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.6YjFA7	2026-08-04 20:37:37.721278785 +0000
+++ /tmp/new.x99yEW	2026-08-04 20:37:37.721278785 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/wireshark/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.gwudhx	2026-08-04 20:37:37.787280607 +0000
+++ /tmp/new.VaiTzS	2026-08-04 20:37:37.788280634 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/workflowy/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/wrike/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.8EouuH	2026-08-04 20:37:37.914284113 +0000
+++ /tmp/new.b5f3Vc	2026-08-04 20:37:37.914284113 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/xnconvert/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/yarn/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.Lex02A	2026-08-04 20:37:38.032287370 +0000
+++ /tmp/new.pUgEhj	2026-08-04 20:37:38.032287370 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/yubico-authenticator/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.qhCVOS	2026-08-04 20:37:38.101289275 +0000
+++ /tmp/new.hdQypB	2026-08-04 20:37:38.101289275 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/zoom-outlook-plugin/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.joHS9v	2026-08-04 20:37:38.157290821 +0000
+++ /tmp/new.rNgQd5	2026-08-04 20:37:38.157290821 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/zoom/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.O4fCBw	2026-08-04 20:37:38.219292532 +0000
+++ /tmp/new.7JZqYR	2026-08-04 20:37:38.219292532 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/zulip/windows.json

=== Install // 8959087b -> 22e48c46 ===

--- /tmp/old.m2fZYb	2026-08-04 20:37:38.298294713 +0000
+++ /tmp/new.epyual	2026-08-04 20:37:38.298294713 +0000
@@ -1,13 +1,21 @@
 $logFile = "${env:TEMP}/fleet-install-software.log"
 
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
+
 try {
 
 $installProcess = Start-Process msiexec.exe `
-  -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" `
+  -ArgumentList "/quiet /norestart /lv `"${logFile}`" /i `"${env:INSTALLER_PATH}`"" `
   -PassThru -Verb RunAs -Wait
 
 Get-Content $logFile -Tail 500
 
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+
 Exit $installProcess.ExitCode
 
 } catch {

=== Uninstall Script (no changes) ===

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Updated maintained-app definitions with new versions, installer URLs, patch queries, and SHA-256 checksums. Updated many Windows installer references and scripts to quote MSI log paths and accept exit codes 0, 3010, and 1641 as successful. Updated several Darwin installer scripts to use new package filenames.

Possibly related PRs

  • fleetdm/fleet#50407: Propagates MSI success-code and log-path quoting changes across maintained-app installer scripts.
  • fleetdm/fleet#49446: Updates maintained-app metadata and MSI installer handling.
  • fleetdm/fleet#49363: Updates maintained-app versions, installer references, and checksums.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is largely incomplete and omits the required issue reference, checklist items, and testing information. Add the required template sections, provide the related issue or mark it as not applicable, and complete the checklist and testing details.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the primary change: updating Fleet-maintained app data.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fma-2608042028

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ee/maintained-apps/outputs/asana/darwin.json`:
- Line 9: Restrict the arm64-only Darwin installers to Apple Silicon hosts by
adding architecture-specific gating to the Asana entry at
ee/maintained-apps/outputs/asana/darwin.json:9-9 and the Loom entry at
ee/maintained-apps/outputs/loom/darwin.json:9-9. Ensure Fleet selects each arm64
URL only when the host architecture is arm64 and excludes Intel macOS hosts,
using the repository’s established architecture or install-condition metadata.

In `@ee/maintained-apps/outputs/bitwig-studio/windows.json`:
- Line 19: Update the shared MSI installation script around Start-Process and
$installProcess in ee/maintained-apps/outputs/bitwig-studio/windows.json:19-19,
ee/maintained-apps/outputs/blender/windows.json:21-21,
ee/maintained-apps/outputs/mixxx/windows.json:20-20,
ee/maintained-apps/outputs/mongodb-compass/windows.json:20-20,
ee/maintained-apps/outputs/mysqlworkbench/windows.json:20-20,
ee/maintained-apps/outputs/naps2/windows.json:20-20,
ee/maintained-apps/outputs/nessus-agent/windows.json:20-20, and
ee/maintained-apps/outputs/nextcloud/windows.json:20-20. Replace the unbounded
-Wait behavior with a bounded wait, detect timeout, terminate the MSI process,
and exit through the existing failure handling while preserving normal exit-code
processing for completed installations.

In `@ee/maintained-apps/outputs/bluej/windows.json`:
- Line 19: Update the BlueJ MSI install script’s exit handling after
Start-Process completes so exit codes 0, 3010, and 1641 all exit successfully;
preserve the existing nonzero failure behavior for other codes.

In `@ee/maintained-apps/outputs/cinc/windows.json`:
- Around line 19-20: Update the uninstall script identified by the 34a531d4
entry to define the same $successCodes collection used by the installation
script, including 0, 3010, and 1641. Change its process.ExitCode check so these
codes are treated as successful while preserving the existing failure logging
and exit behavior for all other codes.

In `@ee/maintained-apps/outputs/eclipse-temurin-jdk-17/windows.json`:
- Line 20: Use unique MSI log paths in the embedded installation scripts across
ee/maintained-apps/outputs/eclipse-temurin-jdk-17/windows.json:20-20,
eclipse-temurin-jdk-21/windows.json:20-20,
eclipse-temurin-jdk-8/windows.json:20-20,
eclipse-temurin-jre-11/windows.json:20-20,
eclipse-temurin-jre-17/windows.json:20-20,
eclipse-temurin-jre-21/windows.json:20-20,
eclipse-temurin-jre-8/windows.json:20-20, egnyte-webedit/windows.json:20-20,
elevate-uc/windows.json:20-20, elgato-control-center/windows.json:20-20, and
elgato-stream-deck/windows.json:20-20. Update the logFile assignment used by
Start-Process and Get-Content to include an installer-specific or otherwise
unique name, preserving the existing logging and exit-code handling.

In `@ee/maintained-apps/outputs/sourcetree/windows.json`:
- Line 10: Update install script ref e23ea804 to map MSI exit codes 3010 and
1641 to exit code 0, while preserving the existing ACCEPT EULA setting
(ACCEPTEULA=1) and unchanged handling for other exit codes.

In `@ee/maintained-apps/outputs/trezor-suite/darwin.json`:
- Line 9: Update the trezor-suite/darwin manifest’s installer metadata so it
serves an installer compatible with all Darwin hosts: either add
architecture-aware URLs for Apple Silicon and Intel systems, or replace the
current arm64-only asset with a universal/Intel-compatible DMG. Preserve the
existing release version and manifest structure.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 7092b969-3e02-48be-81df-421ac710aab7

📥 Commits

Reviewing files that changed from the base of the PR and between c49d3d8 and 11f07a8.

📒 Files selected for processing (241)
  • ee/maintained-apps/outputs/1password/windows.json
  • ee/maintained-apps/outputs/7-zip/windows.json
  • ee/maintained-apps/outputs/8x8-work/darwin.json
  • ee/maintained-apps/outputs/8x8-work/windows.json
  • ee/maintained-apps/outputs/adobe-acrobat-pro/windows.json
  • ee/maintained-apps/outputs/adobe-acrobat-reader/windows.json
  • ee/maintained-apps/outputs/adobe-dng-converter/darwin.json
  • ee/maintained-apps/outputs/advanced-installer/windows.json
  • ee/maintained-apps/outputs/advanced-renamer/darwin.json
  • ee/maintained-apps/outputs/aircall/windows.json
  • ee/maintained-apps/outputs/airparrot/windows.json
  • ee/maintained-apps/outputs/airtame/windows.json
  • ee/maintained-apps/outputs/alacritty/windows.json
  • ee/maintained-apps/outputs/alfaview/windows.json
  • ee/maintained-apps/outputs/allway-sync/windows.json
  • ee/maintained-apps/outputs/amazon-corretto-11/windows.json
  • ee/maintained-apps/outputs/amazon-corretto-17/windows.json
  • ee/maintained-apps/outputs/amazon-corretto-21/windows.json
  • ee/maintained-apps/outputs/amazon-corretto-24/windows.json
  • ee/maintained-apps/outputs/amazon-corretto-25/windows.json
  • ee/maintained-apps/outputs/amazon-corretto-26/windows.json
  • ee/maintained-apps/outputs/amazon-corretto-8/windows.json
  • ee/maintained-apps/outputs/amazon-corretto-jre-8/windows.json
  • ee/maintained-apps/outputs/amazon-dcv-client/windows.json
  • ee/maintained-apps/outputs/amazon-dcv-server/windows.json
  • ee/maintained-apps/outputs/amazon-redshift-odbc-driver/windows.json
  • ee/maintained-apps/outputs/amazon-workspaces/windows.json
  • ee/maintained-apps/outputs/apidog/darwin.json
  • ee/maintained-apps/outputs/aptakube/windows.json
  • ee/maintained-apps/outputs/arduino-ide/windows.json
  • ee/maintained-apps/outputs/asana/darwin.json
  • ee/maintained-apps/outputs/audiveris/windows.json
  • ee/maintained-apps/outputs/autopsy/windows.json
  • ee/maintained-apps/outputs/aws-cli/windows.json
  • ee/maintained-apps/outputs/aws-sam-cli/windows.json
  • ee/maintained-apps/outputs/aws-vpn-client/windows.json
  • ee/maintained-apps/outputs/azul-zulu-25-jdk/windows.json
  • ee/maintained-apps/outputs/azul-zulu-25-jre/windows.json
  • ee/maintained-apps/outputs/azure-functions-core-tools/windows.json
  • ee/maintained-apps/outputs/betterzip/darwin.json
  • ee/maintained-apps/outputs/beyond-compare/darwin.json
  • ee/maintained-apps/outputs/beyond-compare/windows.json
  • ee/maintained-apps/outputs/bitwig-studio/windows.json
  • ee/maintained-apps/outputs/blender/windows.json
  • ee/maintained-apps/outputs/bluej/windows.json
  • ee/maintained-apps/outputs/box-drive/windows.json
  • ee/maintained-apps/outputs/box-tools/windows.json
  • ee/maintained-apps/outputs/browserstacklocal/windows.json
  • ee/maintained-apps/outputs/bruno/windows.json
  • ee/maintained-apps/outputs/calibre/windows.json
  • ee/maintained-apps/outputs/camtasia/windows.json
  • ee/maintained-apps/outputs/charles/darwin.json
  • ee/maintained-apps/outputs/chef-workstation/windows.json
  • ee/maintained-apps/outputs/cherry-keys/windows.json
  • ee/maintained-apps/outputs/chrome-remote-desktop/windows.json
  • ee/maintained-apps/outputs/cinc/windows.json
  • ee/maintained-apps/outputs/cisco-jabber/windows.json
  • ee/maintained-apps/outputs/cisco-webex-recorder-and-player/windows.json
  • ee/maintained-apps/outputs/claude/darwin.json
  • ee/maintained-apps/outputs/clickup/windows.json
  • ee/maintained-apps/outputs/clockassist/windows.json
  • ee/maintained-apps/outputs/clockify/windows.json
  • ee/maintained-apps/outputs/cloudflare-warp/windows.json
  • ee/maintained-apps/outputs/cmake-app/windows.json
  • ee/maintained-apps/outputs/codemeter-runtime-kit/windows.json
  • ee/maintained-apps/outputs/codexbar/darwin.json
  • ee/maintained-apps/outputs/colour-contrast-analyser/windows.json
  • ee/maintained-apps/outputs/crashplan/windows.json
  • ee/maintained-apps/outputs/creative-force-kelvin/windows.json
  • ee/maintained-apps/outputs/crestron-airmedia-peripherals/windows.json
  • ee/maintained-apps/outputs/crestron-airmedia/windows.json
  • ee/maintained-apps/outputs/cribl-edge/windows.json
  • ee/maintained-apps/outputs/crisisgo/windows.json
  • ee/maintained-apps/outputs/cryptomator/windows.json
  • ee/maintained-apps/outputs/cursor/windows.json
  • ee/maintained-apps/outputs/cyberduck-cli/windows.json
  • ee/maintained-apps/outputs/cyberduck/darwin.json
  • ee/maintained-apps/outputs/cyberduck/windows.json
  • ee/maintained-apps/outputs/db-browser-for-sqlite/windows.json
  • ee/maintained-apps/outputs/dbgate/darwin.json
  • ee/maintained-apps/outputs/delinea-connection-manager/windows.json
  • ee/maintained-apps/outputs/devolutions-launcher/windows.json
  • ee/maintained-apps/outputs/devolutions-workspace/windows.json
  • ee/maintained-apps/outputs/devpod/windows.json
  • ee/maintained-apps/outputs/digiseal-reader/windows.json
  • ee/maintained-apps/outputs/discord/darwin.json
  • ee/maintained-apps/outputs/discord/windows.json
  • ee/maintained-apps/outputs/dngrep/windows.json
  • ee/maintained-apps/outputs/docker/windows.json
  • ee/maintained-apps/outputs/dot/darwin.json
  • ee/maintained-apps/outputs/downie/darwin.json
  • ee/maintained-apps/outputs/draftable-desktop/windows.json
  • ee/maintained-apps/outputs/drawio/windows.json
  • ee/maintained-apps/outputs/drofus/windows.json
  • ee/maintained-apps/outputs/dropbox/windows.json
  • ee/maintained-apps/outputs/druva-insync/windows.json
  • ee/maintained-apps/outputs/duo-desktop/darwin.json
  • ee/maintained-apps/outputs/duo-desktop/windows.json
  • ee/maintained-apps/outputs/eclipse-temurin-jdk-11/windows.json
  • ee/maintained-apps/outputs/eclipse-temurin-jdk-17/windows.json
  • ee/maintained-apps/outputs/eclipse-temurin-jdk-21/windows.json
  • ee/maintained-apps/outputs/eclipse-temurin-jdk-8/windows.json
  • ee/maintained-apps/outputs/eclipse-temurin-jre-11/windows.json
  • ee/maintained-apps/outputs/eclipse-temurin-jre-17/windows.json
  • ee/maintained-apps/outputs/eclipse-temurin-jre-21/windows.json
  • ee/maintained-apps/outputs/eclipse-temurin-jre-8/windows.json
  • ee/maintained-apps/outputs/egnyte-webedit/windows.json
  • ee/maintained-apps/outputs/elevate-uc/windows.json
  • ee/maintained-apps/outputs/elgato-control-center/windows.json
  • ee/maintained-apps/outputs/elgato-stream-deck/windows.json
  • ee/maintained-apps/outputs/emclient/windows.json
  • ee/maintained-apps/outputs/endnote/windows.json
  • ee/maintained-apps/outputs/epic-games/windows.json
  • ee/maintained-apps/outputs/exifcleaner/darwin.json
  • ee/maintained-apps/outputs/filebeat/windows.json
  • ee/maintained-apps/outputs/firefox/darwin.json
  • ee/maintained-apps/outputs/firefox/windows.json
  • ee/maintained-apps/outputs/firefox@developer-edition/darwin.json
  • ee/maintained-apps/outputs/firefox@nightly/darwin.json
  • ee/maintained-apps/outputs/flexwhere/windows.json
  • ee/maintained-apps/outputs/fortify/windows.json
  • ee/maintained-apps/outputs/genesys-cloud/darwin.json
  • ee/maintained-apps/outputs/genesys-cloud/windows.json
  • ee/maintained-apps/outputs/geogebra-classic/windows.json
  • ee/maintained-apps/outputs/git-extensions/windows.json
  • ee/maintained-apps/outputs/github-desktop/windows.json
  • ee/maintained-apps/outputs/go/windows.json
  • ee/maintained-apps/outputs/google-ads-editor/windows.json
  • ee/maintained-apps/outputs/google-chrome/windows.json
  • ee/maintained-apps/outputs/google-credential-provider-for-windows/windows.json
  • ee/maintained-apps/outputs/gotomeeting/windows.json
  • ee/maintained-apps/outputs/grammarly-desktop/darwin.json
  • ee/maintained-apps/outputs/granola/windows.json
  • ee/maintained-apps/outputs/grepwin/windows.json
  • ee/maintained-apps/outputs/home-assistant/darwin.json
  • ee/maintained-apps/outputs/hwmonitor/windows.json
  • ee/maintained-apps/outputs/ibm-semeru-jdk-11/windows.json
  • ee/maintained-apps/outputs/ibm-semeru-jdk-17/windows.json
  • ee/maintained-apps/outputs/ibm-semeru-jdk-21/windows.json
  • ee/maintained-apps/outputs/ibm-semeru-jdk-8/windows.json
  • ee/maintained-apps/outputs/ibm-semeru-jre-11/windows.json
  • ee/maintained-apps/outputs/ibm-semeru-jre-17/windows.json
  • ee/maintained-apps/outputs/ibm-semeru-jre-21/windows.json
  • ee/maintained-apps/outputs/ibm-semeru-jre-8/windows.json
  • ee/maintained-apps/outputs/imageglass/windows.json
  • ee/maintained-apps/outputs/imhex/windows.json
  • ee/maintained-apps/outputs/inkscape/windows.json
  • ee/maintained-apps/outputs/ironpython/windows.json
  • ee/maintained-apps/outputs/jami/windows.json
  • ee/maintained-apps/outputs/jetbrains-toolbox/darwin.json
  • ee/maintained-apps/outputs/jetbrains-toolbox/windows.json
  • ee/maintained-apps/outputs/keepassxc/windows.json
  • ee/maintained-apps/outputs/lapce/windows.json
  • ee/maintained-apps/outputs/lastpass/windows.json
  • ee/maintained-apps/outputs/libreoffice/windows.json
  • ee/maintained-apps/outputs/linear/darwin.json
  • ee/maintained-apps/outputs/linear/windows.json
  • ee/maintained-apps/outputs/lookaway/darwin.json
  • ee/maintained-apps/outputs/loom/darwin.json
  • ee/maintained-apps/outputs/loom/windows.json
  • ee/maintained-apps/outputs/macwhisper/darwin.json
  • ee/maintained-apps/outputs/marked-app/darwin.json
  • ee/maintained-apps/outputs/mattermost/windows.json
  • ee/maintained-apps/outputs/microsoft-365-copilot/darwin.json
  • ee/maintained-apps/outputs/microsoft-edge/windows.json
  • ee/maintained-apps/outputs/microsoft-teams/darwin.json
  • ee/maintained-apps/outputs/microsoft-teams/windows.json
  • ee/maintained-apps/outputs/miro/windows.json
  • ee/maintained-apps/outputs/mixxx/windows.json
  • ee/maintained-apps/outputs/mongodb-compass/windows.json
  • ee/maintained-apps/outputs/mysqlworkbench/windows.json
  • ee/maintained-apps/outputs/naps2/windows.json
  • ee/maintained-apps/outputs/nessus-agent/windows.json
  • ee/maintained-apps/outputs/nextcloud/windows.json
  • ee/maintained-apps/outputs/nodejs/windows.json
  • ee/maintained-apps/outputs/notepadexe/darwin.json
  • ee/maintained-apps/outputs/notion/darwin.json
  • ee/maintained-apps/outputs/notion/windows.json
  • ee/maintained-apps/outputs/nudge/darwin.json
  • ee/maintained-apps/outputs/omnifocus/darwin.json
  • ee/maintained-apps/outputs/opencode-desktop/darwin.json
  • ee/maintained-apps/outputs/openvpn-connect/windows.json
  • ee/maintained-apps/outputs/origami-studio/darwin.json
  • ee/maintained-apps/outputs/p4v/windows.json
  • ee/maintained-apps/outputs/pale-moon/darwin.json
  • ee/maintained-apps/outputs/pdfsam-basic/windows.json
  • ee/maintained-apps/outputs/plex-media-server/darwin.json
  • ee/maintained-apps/outputs/postman/darwin.json
  • ee/maintained-apps/outputs/powershell/windows.json
  • ee/maintained-apps/outputs/prisma-browser/windows.json
  • ee/maintained-apps/outputs/putty/windows.json
  • ee/maintained-apps/outputs/quip/darwin.json
  • ee/maintained-apps/outputs/rectangle-pro/darwin.json
  • ee/maintained-apps/outputs/reflector/windows.json
  • ee/maintained-apps/outputs/remote-desktop-manager/windows.json
  • ee/maintained-apps/outputs/rewritebar/darwin.json
  • ee/maintained-apps/outputs/rider/darwin.json
  • ee/maintained-apps/outputs/royal-tsx/windows.json
  • ee/maintained-apps/outputs/santa/darwin.json
  • ee/maintained-apps/outputs/shapr3d/darwin.json
  • ee/maintained-apps/outputs/sharefile/windows.json
  • ee/maintained-apps/outputs/snagit/windows.json
  • ee/maintained-apps/outputs/sonicwall-netextender/windows.json
  • ee/maintained-apps/outputs/sourcetree/windows.json
  • ee/maintained-apps/outputs/spotify/windows.json
  • ee/maintained-apps/outputs/superwhisper/darwin.json
  • ee/maintained-apps/outputs/tailscale-app/darwin.json
  • ee/maintained-apps/outputs/tailscale/windows.json
  • ee/maintained-apps/outputs/textexpander/windows.json
  • ee/maintained-apps/outputs/thunderbird/darwin.json
  • ee/maintained-apps/outputs/thunderbird/windows.json
  • ee/maintained-apps/outputs/tightvnc/windows.json
  • ee/maintained-apps/outputs/todoist-app/darwin.json
  • ee/maintained-apps/outputs/todoist-app/windows.json
  • ee/maintained-apps/outputs/topaz-gigapixel-ai/windows.json
  • ee/maintained-apps/outputs/topaz-photo-ai/windows.json
  • ee/maintained-apps/outputs/tortoisegit/windows.json
  • ee/maintained-apps/outputs/tower/windows.json
  • ee/maintained-apps/outputs/transmission/windows.json
  • ee/maintained-apps/outputs/trezor-suite/darwin.json
  • ee/maintained-apps/outputs/twingate/windows.json
  • ee/maintained-apps/outputs/typeface/darwin.json
  • ee/maintained-apps/outputs/ultimaker-cura/windows.json
  • ee/maintained-apps/outputs/vlc/windows.json
  • ee/maintained-apps/outputs/wave/windows.json
  • ee/maintained-apps/outputs/weasis/darwin.json
  • ee/maintained-apps/outputs/weasis/windows.json
  • ee/maintained-apps/outputs/webex/windows.json
  • ee/maintained-apps/outputs/whatsapp/darwin.json
  • ee/maintained-apps/outputs/windirstat/windows.json
  • ee/maintained-apps/outputs/windows-app/darwin.json
  • ee/maintained-apps/outputs/winlogbeat/windows.json
  • ee/maintained-apps/outputs/wireshark/windows.json
  • ee/maintained-apps/outputs/workflowy/darwin.json
  • ee/maintained-apps/outputs/wrike/windows.json
  • ee/maintained-apps/outputs/xnconvert/windows.json
  • ee/maintained-apps/outputs/yarn/windows.json
  • ee/maintained-apps/outputs/yubico-authenticator/windows.json
  • ee/maintained-apps/outputs/zoom-outlook-plugin/windows.json
  • ee/maintained-apps/outputs/zoom/windows.json
  • ee/maintained-apps/outputs/zulip/windows.json

"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.asana' AND version_compare(bundle_short_version, '2.8.0') < 0);"
},
"installer_url": "https://desktop-downloads.asana.com/darwin_arm64/prod/v2.7.2/Asana-darwin-arm64-2.7.2.zip",
"installer_url": "https://desktop-downloads.asana.com/darwin_arm64/prod/v2.8.0/Asana-darwin-arm64-2.8.0.zip",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 4 'darwin_arm64|arm64|x86_64|universal|architecture' ee/maintained-apps
rg -n -C 4 'installer_url|architecture|arm64|x86_64|universal' .

Repository: fleetdm/fleet

Length of output: 50370


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== target manifests =="
for f in ee/maintained-apps/outputs/asana/darwin.json ee/maintained-apps/outputs/loom/darwin.json; do
  echo "--- $f"
  wc -l "$f"
  cat -n "$f"
done

echo "== focused repo searches for maint-app installers/architecture matching =="
rg -n -C 3 'darwin_arm64|x86_64|universal|Architecture|arch|arches|Maintained|SoftwareInstall|Installer|installer' ee/maintained-apps server frontend --glob '!**/*.md' \
  | rg -C 3 'darwin_arm64|x86_64|arm64|universal|Architecture|arches|maintained-apps|installer_url|os_versions|arch' || true

Repository: fleetdm/fleet

Length of output: 50370


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== target manifest metadata =="
for f in ee/maintained-apps/outputs/asana/darwin.json ee/maintained-apps/outputs/loom/darwin.json; do
  echo "--- $f"
  python3 - <<'PY' "$f"
import json, sys
p=sys.argv[1]
data=json.load(open(p))
print(json.dumps({
    "path": p,
    "keys": sorted(data.keys()),
    "installer_url": data.get("installer_url"),
    "supported_os": data.get("supported_os"),
    "architectures": data.get("architectures"),
    "labels_exclude_any": data.get("labels_exclude_any"),
    "labels_exclude_all": data.get("labels_exclude_all"),
    "labels_include_any": data.get("labels_include_any"),
    "labels_include_all": data.get("labels_include_all"),
}, indent=2, sort_keys=True))
PY
done

echo "== maint apps generator/package metadata shapes =="
rg -n -C 3 'SupportedOS|Supported OS|SupportedOS|architectures|Architecture|labels_exclude|labels_include|labels' ee/maintained-apps --glob '!outputs/**' || true

echo "== focused server schema/type names =="
rg -n -C 3 'Supported.*Os|supported.*os|architectures|architecture|install.*os|installer' server/fleet server/vulnerabilities cmd/server ee/maintained-apps --glob '!outputs/****' | head -n 250

Repository: fleetdm/fleet

Length of output: 50370


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== asana and loom manifest excerpts =="
for f in ee/maintained-apps/outputs/asana/darwin.json ee/maintained-apps/outputs/loom/darwin.json; do
  echo "--- $f"
  python3 - "$f" <<'PY'
import json, sys
p=sys.argv[1]
try:
    data=json.load(sys.stdin)
except Exception as exc:
    print("json_error", exc)
    raise SystemExit(1)
print("top_keys", sorted(data.keys()))
print("installer_url", data.get("installer_url"))
for k in ["supported_os", "architectures", "install_if", "labels_exclude_any", "labels_exclude_all", "labels_include_any", "labels_include_all"]:
    print(k, data.get(k))
PY

echo "== exact maint apps output files with arm64/artifacts containing x86_64/universal =="
python3 - <<'PYF'
import json, pathlib, subprocess
for f in sorted(pathlib.Path("ee/maintained-apps/outputs").rglob("*.json")):
    try:
        data=json.loads(f.read_text())
    except UnicodeDecodeError:
        continue
    except json.JSONDecodeError:
        continue
    installer=data.get("installer_url") or ""
    has_64="x86_64" in f.name or "intel" in f.name or "amd64" in f.name or "x64" in f.name
    has_arm="arm64" in f.name or "apple" in f.name.lower() or "silicon" in f.name.lower()
    print(f"{f}\n  name_has_intel_or_arm={has_64 or has_arm}\n  installer={installer}\n  top={sorted(data.keys())}\n")
PYF

echo "== focused server/installation selection terms =="
rg -n -C 4 'Arch|arches|architecture|supported.*os|supported_os|os_version|host_arch|darwin_arm64|x86_64|install' server ee/maintained-apps --glob '!outputs/****' --glob '!**/*.md' | head -n 350

Repository: fleetdm/fleet

Length of output: 242


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== asana manifest top-level fields =="
python3 - <<'PY' ee/maintained-apps/outputs/asana/darwin.json
import json, sys
with open(sys.argv[1]) as f:
    data=json.load(f)
print(json.dumps({"top_keys": sorted(data), "installer_url": data.get("installer_url"), "supported_os": data.get("supported_os"), "architectures": data.get("architectures"), "install_if": data.get("install_if"), "labels_exclude_any": data.get("labels_exclude_any"), "labels_exclude_all": data.get("labels_exclude_all"), "labels_include_any": data.get("labels_include_any"), "labels_include_all": data.get("labels_include_all")}, indent=2, sort_keys=True))
PY

echo "== loom manifest top-level fields =="
python3 - <<'PY' ee/maintained-apps/outputs/loom/darwin.json
import json, sys
with open(sys.argv[1]) as f:
    data=json.load(f)
print(json.dumps({"top_keys": sorted(data), "installer_url": data.get("installer_url"), "supported_os": data.get("supported_os"), "architectures": data.get("architectures"), "install_if": data.get("install_if"), "labels_exclude_any": data.get("labels_exclude_any"), "labels_exclude_all": data.get("labels_exclude_all"), "labels_include_any": data.get("labels_include_any"), "labels_include_all": data.get("labels_include_all")}, indent=2, sort_keys=True))
PY

echo "== focused selection metadata in maintain-app outputs and server code =="
rg -n -C 5 'architectures|supported_os|install_if|labels_exclude_any|labels_exclude_all|labels_include_any|labels_include_all|darwin_arm64|darwin|x86_64|arm64|os_version|software_version|arch' ee/maintained-apps/server ee/maintained-apps/server --glob '!outputs/**' --glob '!**/*.md' || true

Repository: fleetdm/fleet

Length of output: 973


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== root asana/loom darwin.json files =="
for f in ee/maintained-apps/outputs/asana/darwin.json ee/maintained-apps/outputs/loom/darwin.json; do
  echo "--- $f"
  wc -l "$f"
  python3 - "$f" <<'PY'
import json, sys
with open(sys.argv[1]) as f:
    data=json.load(f)
print(json.dumps({"versions": data.get("versions"), "refs": data.get("refs"), "installer_url": data.get("installer_url")}, indent=2, sort_keys=True))
PY
done

echo "== focused server terms for software version/host architecture selection =="
rg -n -C 5 'architectures|supported_os|install_if|labels_exclude_any|labels_exclude_all|labels_include_any|labels_include_all|darwin_arm64|x86_64|arm64|os_version|software_version|install.*arch|host.*arch|arch.*host|Architecture' server ee/maintained-apps --glob '!outputs/****' --glob '!**/*.md' | head -n 450

echo "== install script metadata search in referenced scripts =="
python3 - <<'PY'
import json, pathlib, re
for p in ["ee/maintained-apps/outputs/asana/darwin.json","ee/maintained-apps/outputs/loom/darwin.json"]:
    data=json.loads(pathlib.Path(p).read_text())
    print(p, "script_count", len(data.get("refs")), "urls", data.get("versions", []))
PY

Repository: fleetdm/fleet

Length of output: 50369


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== exact selection fields in software_installer types =="
sed -n '1,170p' server/fleet/software_installer.go
sed -n '1020,1075p' server/fleet/software_installer.go

echo "== exact installer version selection code =="
rg -n -C 6 'SoftwareInstallerVersion|SoftwareInstallers|SoftwareInstaller|SoftwareVersions|Architecture|LabelsInclude|LabelsExclude|supported.*os|os_version|host_arch|installer.*arch|architecture' server ee/maintained-apps --glob '!outputs/****' | head -n 500

echo "== read-only behavioral probe of manifest absence of selector fields =="
python3 - <<'PY'
import json, pathlib
for path in ["ee/maintained-apps/outputs/asana/darwin.json", "ee/maintained-apps/outputs/loom/darwin.json"]:
    data=json.loads(pathlib.Path(path).read_text())
    version=data["versions"][0]
    print(path)
    for key in ["architectures", "install_if", "labels_exclude_any", "labels_exclude_all", "labels_include_any", "labels_include_all", "supported_os", "installer_url", "install_script_ref"]:
        print(" ", key, "=>", version if key in version else data.get(key))
PY

Repository: fleetdm/fleet

Length of output: 50369


Add host architecture gating for the arm64-only Darwin installers.

Both Asana and Loom provide only the Apple Silicon installer while their versions[0] metadata has no architecture-specific field, such as architectures, or install_if/label scope that excludes Intel macOS hosts. Ensure Fleet selects the Asana darwin_arm64 URL and the Loom arm64 DMG only for arm64 Mac hosts before installing.

📍 Affects 2 files
  • ee/maintained-apps/outputs/asana/darwin.json#L9-L9 (this comment)
  • ee/maintained-apps/outputs/loom/darwin.json#L9-L9
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/asana/darwin.json` at line 9, Restrict the
arm64-only Darwin installers to Apple Silicon hosts by adding
architecture-specific gating to the Asana entry at
ee/maintained-apps/outputs/asana/darwin.json:9-9 and the Loom entry at
ee/maintained-apps/outputs/loom/darwin.json:9-9. Ensure Fleet selects each arm64
URL only when the host architecture is arm64 and excludes Intel macOS hosts,
using the repository’s established architecture or install-condition metadata.

],
"refs": {
"8959087b": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv ${logFile} /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
"22e48c46": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\n# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,\n# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.\n$successCodes = @(0, 3010, 1641)\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv `\"${logFile}`\" /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nif ($successCodes -contains $installProcess.ExitCode) {\n Exit 0\n}\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Bound the shared MSI installation wait.

The shared 22e48c46 script uses -Wait without a timeout. A hung msiexec.exe can block an installation indefinitely.

  • ee/maintained-apps/outputs/bitwig-studio/windows.json#L19-L19: add a bounded wait and terminate the MSI process on timeout.
  • ee/maintained-apps/outputs/blender/windows.json#L21-L21: add a bounded wait and terminate the MSI process on timeout.
  • ee/maintained-apps/outputs/mixxx/windows.json#L20-L20: add a bounded wait and terminate the MSI process on timeout.
  • ee/maintained-apps/outputs/mongodb-compass/windows.json#L20-L20: add a bounded wait and terminate the MSI process on timeout.
  • ee/maintained-apps/outputs/mysqlworkbench/windows.json#L20-L20: add a bounded wait and terminate the MSI process on timeout.
  • ee/maintained-apps/outputs/naps2/windows.json#L20-L20: add a bounded wait and terminate the MSI process on timeout.
  • ee/maintained-apps/outputs/nessus-agent/windows.json#L20-L20: add a bounded wait and terminate the MSI process on timeout.
  • ee/maintained-apps/outputs/nextcloud/windows.json#L20-L20: add a bounded wait and terminate the MSI process on timeout.
📍 Affects 8 files
  • ee/maintained-apps/outputs/bitwig-studio/windows.json#L19-L19 (this comment)
  • ee/maintained-apps/outputs/blender/windows.json#L21-L21
  • ee/maintained-apps/outputs/mixxx/windows.json#L20-L20
  • ee/maintained-apps/outputs/mongodb-compass/windows.json#L20-L20
  • ee/maintained-apps/outputs/mysqlworkbench/windows.json#L20-L20
  • ee/maintained-apps/outputs/naps2/windows.json#L20-L20
  • ee/maintained-apps/outputs/nessus-agent/windows.json#L20-L20
  • ee/maintained-apps/outputs/nextcloud/windows.json#L20-L20
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/bitwig-studio/windows.json` at line 19, Update the
shared MSI installation script around Start-Process and $installProcess in
ee/maintained-apps/outputs/bitwig-studio/windows.json:19-19,
ee/maintained-apps/outputs/blender/windows.json:21-21,
ee/maintained-apps/outputs/mixxx/windows.json:20-20,
ee/maintained-apps/outputs/mongodb-compass/windows.json:20-20,
ee/maintained-apps/outputs/mysqlworkbench/windows.json:20-20,
ee/maintained-apps/outputs/naps2/windows.json:20-20,
ee/maintained-apps/outputs/nessus-agent/windows.json:20-20, and
ee/maintained-apps/outputs/nextcloud/windows.json:20-20. Replace the unbounded
-Wait behavior with a bounded wait, detect timeout, terminate the MSI process,
and exit through the existing failure handling while preserving normal exit-code
processing for completed installations.

],
"refs": {
"29a9338f": "# BlueJ ships a per-user WiX MSI. Fleet runs installs elevated (SYSTEM), so we\n# pass ALLUSERS=2 — the same switch winget uses — which resolves to a per-machine\n# install (into %ProgramFiles%\\BlueJ) when run elevated.\n\n$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv ${logFile} /i `\"${env:INSTALLER_PATH}`\" ALLUSERS=2\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
"85459eac": "# BlueJ ships a per-user WiX MSI. Fleet runs installs elevated (SYSTEM), so we\n# pass ALLUSERS=2 — the same switch winget uses — which resolves to a per-machine\n# install (into %ProgramFiles%\\BlueJ) when run elevated.\n\n$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv `\"${logFile}`\" /i `\"${env:INSTALLER_PATH}`\" ALLUSERS=2\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "File excerpt:"
sed -n '1,80p' ee/maintained-apps/outputs/bluej/windows.json

echo
echo "Search for similar MSI exit code handling in installed software scripts:"
rg -n "Install-RebootRequest|WAIT_USER_LOGON|SUCCEED_REBOOT|3010|1641|Exit \$installProcess\.ExitCode|msiexec.exe|BlueJ" ee/maintained-apps/outputs ee -g '*.json' -g '*.ps1' | head -200

echo
echo "Repository files under BlueJ:"
find ee/maintained-apps/outputs/bluej -maxdepth 3 -type f -print | sort

Repository: fleetdm/fleet

Length of output: 50370


Map MSI reboot-success exit codes to success.

msiexec can return 3010 or 1641 to indicate a successful install that needs a reboot. The current BlueJ install script exits with that non-zero code and can mark the installation as failed. Treat 0, 3010, and 1641 as success before exiting.

Proposed fix
 $logFile = "${env:TEMP}/fleet-install-software.log"
+$successCodes = @(0, 3010, 1641)
 
 ...
 
-Exit $installProcess.ExitCode
+if ($successCodes -contains $installProcess.ExitCode) {
+  Exit 0
+}
+Exit $installProcess.ExitCode
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"85459eac": "# BlueJ ships a per-user WiX MSI. Fleet runs installs elevated (SYSTEM), so we\n# pass ALLUSERS=2 — the same switch winget uses — which resolves to a per-machine\n# install (into %ProgramFiles%\\BlueJ) when run elevated.\n\n$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv `\"${logFile}`\" /i `\"${env:INSTALLER_PATH}`\" ALLUSERS=2\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
"85459eac": "# BlueJ ships a per-user WiX MSI. Fleet runs installs elevated (SYSTEM), so we\n# pass ALLUSERS=2 — the same switch winget uses — which resolves to a per-machine\n# install (into %ProgramFiles%\\BlueJ) when run elevated.\n\n$logFile = \"${env:TEMP}/fleet-install-software.log\"\n$successCodes = @(0, 3010, 1641)\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv `\"${logFile}`\" /i `\"${env:INSTALLER_PATH}`\" ALLUSERS=2\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nif ($successCodes -contains $installProcess.ExitCode) {\n Exit 0\n}\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/bluej/windows.json` at line 19, Update the BlueJ
MSI install script’s exit handling after Start-Process completes so exit codes
0, 3010, and 1641 all exit successfully; preserve the existing nonzero failure
behavior for other codes.

Comment on lines +19 to +20
"22e48c46": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\n# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,\n# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.\n$successCodes = @(0, 3010, 1641)\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv `\"${logFile}`\" /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nif ($successCodes -contains $installProcess.ExitCode) {\n Exit 0\n}\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
"34a531d4": "# Fleet uninstalls app by finding all related product codes for the specified upgrade code\n$inst = New-Object -ComObject \"WindowsInstaller.Installer\"\n$timeoutSeconds = 300 # 5 minute timeout per product\n\nforeach ($product_code in $inst.RelatedProducts('{9870C512-DF2C-43D9-8C28-7ACD60ABBE27}')) {\n $process = Start-Process msiexec -ArgumentList @(\"/quiet\", \"/x\", $product_code, \"/norestart\") -PassThru\n\n # Wait for process with timeout\n $completed = $process.WaitForExit($timeoutSeconds * 1000)\n\n if (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n }\n\n # If the uninstall failed, bail\n if ($process.ExitCode -ne 0) {\n Write-Output \"Uninstall for $($product_code) exited $($process.ExitCode)\"\n Exit $process.ExitCode\n }\n}\n\n# All uninstalls succeeded; exit success\nExit 0\n"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Handle reboot-required MSI codes during Cinc uninstall.

34a531d4 treats every exit code other than 0 as a failure. If msiexec /x returns 3010 or 1641, Fleet reports a failed uninstall even though the MSI operation completed with a reboot requirement. Use the same $successCodes check as the other updated uninstall scripts.

Proposed fix
 $timeoutSeconds = 300  # 5 minute timeout per product
+$successCodes = @(0, 3010, 1641)

 foreach ($product_code in $inst.RelatedProducts('{9870C512-DF2C-43D9-8C28-7ACD60ABBE27}')) {
     $process = Start-Process msiexec -ArgumentList @("/quiet", "/x", $product_code, "/norestart") -PassThru
@@
-    if ($process.ExitCode -ne 0) {
+    if ($successCodes -notcontains $process.ExitCode) {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"22e48c46": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\n# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,\n# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.\n$successCodes = @(0, 3010, 1641)\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv `\"${logFile}`\" /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nif ($successCodes -contains $installProcess.ExitCode) {\n Exit 0\n}\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
"34a531d4": "# Fleet uninstalls app by finding all related product codes for the specified upgrade code\n$inst = New-Object -ComObject \"WindowsInstaller.Installer\"\n$timeoutSeconds = 300 # 5 minute timeout per product\n\nforeach ($product_code in $inst.RelatedProducts('{9870C512-DF2C-43D9-8C28-7ACD60ABBE27}')) {\n $process = Start-Process msiexec -ArgumentList @(\"/quiet\", \"/x\", $product_code, \"/norestart\") -PassThru\n\n # Wait for process with timeout\n $completed = $process.WaitForExit($timeoutSeconds * 1000)\n\n if (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n }\n\n # If the uninstall failed, bail\n if ($process.ExitCode -ne 0) {\n Write-Output \"Uninstall for $($product_code) exited $($process.ExitCode)\"\n Exit $process.ExitCode\n }\n}\n\n# All uninstalls succeeded; exit success\nExit 0\n"
"22e48c46": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\n# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,\n# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.\n$successCodes = @(0, 3010, 1641)\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv `\"${logFile}`\" /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nif ($successCodes -contains $installProcess.ExitCode) {\n Exit 0\n}\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
"34a531d4": "# Fleet uninstalls app by finding all related product codes for the specified upgrade code\n$inst = New-Object -ComObject \"WindowsInstaller.Installer\"\n$timeoutSeconds = 300 # 5 minute timeout per product\n$successCodes = @(0, 3010, 1641)\n\nforeach ($product_code in $inst.RelatedProducts('{9870C512-DF2C-43D9-8C28-7ACD60ABBE27}')) {\n $process = Start-Process msiexec -ArgumentList @(\"/quiet\", \"/x\", $product_code, \"/norestart\") -PassThru\n\n # Wait for process with timeout\n $completed = $process.WaitForExit($timeoutSeconds * 1000)\n\n if (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n }\n\n # If the uninstall failed, bail\n if ($successCodes -notcontains $process.ExitCode) {\n Write-Output \"Uninstall for $($product_code) exited $($process.ExitCode)\"\n Exit $process.ExitCode\n }\n}\n\n# All uninstalls succeeded; exit success\nExit 0\n"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/cinc/windows.json` around lines 19 - 20, Update
the uninstall script identified by the 34a531d4 entry to define the same
$successCodes collection used by the installation script, including 0, 3010, and
1641. Change its process.ExitCode check so these codes are treated as successful
while preserving the existing failure logging and exit behavior for all other
codes.

],
"refs": {
"8959087b": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv ${logFile} /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
"22e48c46": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\n# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,\n# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.\n$successCodes = @(0, 3010, 1641)\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv `\"${logFile}`\" /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nif ($successCodes -contains $installProcess.ExitCode) {\n Exit 0\n}\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C 8 \
  'fleet-install-software\.log|Start-Process\s+msiexec|msiexec\.exe|parallel|concurr|worker|semaphore|mutex' \
  --glob '*.go' \
  --glob '*.ps1' \
  --glob '*.json' \
  .

Repository: fleetdm/fleet

Length of output: 50370


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Files with fleet-install-software.log:\n'
rg -l 'fleet-install-software\.log' --glob '*.json' . | sort | sed -n '1,120p'

printf '\nJSON files with MSI start-process patterns:\n'
rg -l 'Start-Process\s+msiexec|msiexec\.exe|/lv\s+' --glob '*.json' ee/maintained-apps/outputs | sort | sed -n '1,120p'

printf '\nCode references to maintained-apps/outputs or script execution in Go/PS1:\n'
rg -n 'maintained-apps/outputs|installed software|software|agent|installer|exec|Launch|Start|Start-Process|Invoke-Expression|PowerShell|msiexec|fleet-install-software|parallel|concurr|worker|queue|semaphore|mutex' \
  --glob '*.go' \
  --glob '*.ps1' \
  . | sed -n '1,240p'

Repository: fleetdm/fleet

Length of output: 39923


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf 'Candidate maintained apps / windows files near shared script:\n'
for f in \
  ee/maintained-apps/outputs/eclipse-temurin-jdk-17/windows.json \
  ee/maintained-apps/outputs/eclipse-temurin-jdk-21/windows.json \
  ee/maintained-apps/outputs/eclipse-temurin-jdk-8/windows.json \
  ee/maintained-apps/outputs/eclipse-temurin-jre-11/windows.json \
  ee/maintained-apps/outputs/eclipse-temurin-jre-17/windows.json \
  ee/maintained-apps/outputs/eclipse-temurin-jre-21/windows.json \
  ee/maintained-apps/outputs/eclipse-temurin-jre-8/windows.json \
  ee/maintained-apps/outputs/egnyte-webedit/windows.json \
  ee/maintained-apps/outputs/elevate-uc/windows.json \
  ee/maintained-apps/outputs/elgato-control-center/windows.json \
  ee/maintained-apps/outputs/elgato-stream-deck/windows.json
do
  printf '\n--- %s ---\n' "$f"
  python3 - <<'PY' "$f"
import json, sys
from pathlib import Path
p = Path(sys.argv[1])
try:
    data = json.loads(p.read_text())
except Exception as e:
    print(f"JSON parse failed: {e}")
    sys.exit(0)
for ref, script in data.get("refs", {}).items():
    if "fleet-install-software.log" in script or "msiexec.exe" in script:
        print(f"\n## refs.{ref} ({len(script.splitlines())} lines)")
        for i, line in enumerate(script.splitlines(), 1):
            if i <= 40:
                print(f"{i:03d}: {line}")
PY
done

printf '\nFocused repository paths mentioning Windows installer execution paths:\n'
rg -n 'windows|Windows|installer|install_process|Start-Process|msiexec|fleet_maintained_apps|maintained_apps|software install|install.*software' \
  --glob '*.go' \
  --glob '*.ps1' \
  --glob '*.yml' \
  --glob '*.yaml' \
  . | sed -n '1,300p'

Repository: fleetdm/fleet

Length of output: 41134


Use unique MSI log paths per script.

These Windows install scripts write to the shared ${env:TEMP}/fleet-install-software.log, so concurrent Fleet MSI installs on the same host can read logs from another installation. Replace the shared path with an installer-specific/unique path or document and enforce MSI queue serialization.

📍 Affects 11 files
  • ee/maintained-apps/outputs/eclipse-temurin-jdk-17/windows.json#L20-L20 (this comment)
  • ee/maintained-apps/outputs/eclipse-temurin-jdk-21/windows.json#L20-L20
  • ee/maintained-apps/outputs/eclipse-temurin-jdk-8/windows.json#L20-L20
  • ee/maintained-apps/outputs/eclipse-temurin-jre-11/windows.json#L20-L20
  • ee/maintained-apps/outputs/eclipse-temurin-jre-17/windows.json#L20-L20
  • ee/maintained-apps/outputs/eclipse-temurin-jre-21/windows.json#L20-L20
  • ee/maintained-apps/outputs/eclipse-temurin-jre-8/windows.json#L20-L20
  • ee/maintained-apps/outputs/egnyte-webedit/windows.json#L20-L20
  • ee/maintained-apps/outputs/elevate-uc/windows.json#L20-L20
  • ee/maintained-apps/outputs/elgato-control-center/windows.json#L20-L20
  • ee/maintained-apps/outputs/elgato-stream-deck/windows.json#L20-L20
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/eclipse-temurin-jdk-17/windows.json` at line 20,
Use unique MSI log paths in the embedded installation scripts across
ee/maintained-apps/outputs/eclipse-temurin-jdk-17/windows.json:20-20,
eclipse-temurin-jdk-21/windows.json:20-20,
eclipse-temurin-jdk-8/windows.json:20-20,
eclipse-temurin-jre-11/windows.json:20-20,
eclipse-temurin-jre-17/windows.json:20-20,
eclipse-temurin-jre-21/windows.json:20-20,
eclipse-temurin-jre-8/windows.json:20-20, egnyte-webedit/windows.json:20-20,
elevate-uc/windows.json:20-20, elgato-control-center/windows.json:20-20, and
elgato-stream-deck/windows.json:20-20. Update the logFile assignment used by
Start-Process and Get-Content to include an installer-specific or otherwise
unique name, preserving the existing logging and exit-code handling.

},
"installer_url": "https://product-downloads.atlassian.com/software/sourcetree/windows/ga/SourcetreeEnterpriseSetup_3.4.31.msi",
"install_script_ref": "17f62246",
"install_script_ref": "e23ea804",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== target file =="
cat -n ee/maintained-apps/outputs/sourcetree/windows.json | sed -n '1,80p'

echo
echo "== similar installer script refs in outputs =="
rg -n '"install_script_ref":|"output_script_ref":|SOURCEWIZ|ACCEPTEULA|installProcess\.ExitCode|ExitCode' ee/maintained-apps/outputs -g '*.json' | head -200

echo
echo "== installed scripts for refs if present =="
git ls-files | rg 'ee/maintained-apps/.*\b(shepherd|maintained-apps|.*\.ps1|.*\.psm1).*' || true

Repository: fleetdm/fleet

Length of output: 50370


🌐 Web query:

Windows Installer msiexec exit code 3010 ERROR_SUCCESS_REBOOT_REQUIRED 1641 ERROR_SUCCESS_REBOOT_INITIATED

💡 Result:

In Windows Installer (msiexec.exe), both exit codes 3010 and 1641 are considered indicators of success, signifying that the operation completed successfully but requires a system restart to finalize changes [1][2][3]. While they are both success codes, they differ in how the restart is handled [4]. Exit Code 3010: ERROR_SUCCESS_REBOOT_REQUIRED This code indicates that the installation or uninstallation completed successfully, but a restart is required to finish the process [1][3]. In this scenario, the installer has NOT initiated the reboot itself; it is signaling to the management system or user that a restart should be performed at a convenient time to complete the installation [5][4]. Exit Code 1641: ERROR_SUCCESS_REBOOT_INITIATED This code indicates that the installation or uninstallation completed successfully and the installer has ALREADY initiated a system restart [6][7][3]. Because the installer is driving the restart, the system may reboot immediately or shortly after the process exits [4]. Key Differences in Management When deploying software via tools like Microsoft Intune, SCCM, or other deployment agents, these codes must be mapped to "Success" to prevent the deployment from being marked as a failure [6][8][3][4]. However, the distinction is important for workflow management [4]: - 3010 (Soft Reboot): Deployment agents often treat this as a success and may continue with subsequent tasks in a queue, deferring the reboot until later [4]. - 1641 (Hard Reboot): Deployment agents often treat this as a signal to halt further processing until the system has successfully restarted, as the installer has taken control of the machine's reboot process [4].

Citations:


Map MSI reboot-success codes to exit code 0.

Sourcetree’s uninstall script already treats 0, 3010, and 1641 as success, but the install script returns Exit $installProcess.ExitCode unchanged. Map MSI exit codes 3010 and 1641 to Exit 0 in ref: e23ea804 while preserving ACCEPTEULA=1 so a successful reboot-required install cannot be reported as failed.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/sourcetree/windows.json` at line 10, Update
install script ref e23ea804 to map MSI exit codes 3010 and 1641 to exit code 0,
while preserving the existing ACCEPT EULA setting (ACCEPTEULA=1) and unchanged
handling for other exit codes.

"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.trezor.TrezorSuite' AND version_compare(bundle_short_version, '26.7.4') < 0);"
},
"installer_url": "https://data.trezor.io/suite/releases/desktop/latest/Trezor-Suite-26.7.3-mac-arm64.dmg",
"installer_url": "https://data.trezor.io/suite/releases/desktop/latest/Trezor-Suite-26.7.4-mac-arm64.dmg",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
rg -n -C 4 'architecture|arm64|x64|darwin' \
  ee/maintained-apps/maintained_apps.go \
  ee/maintained-apps/outputs

Repository: fleetdm/fleet

Length of output: 50370


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== files =="
git ls-files ee/maintained-apps | sed -n '1,120p'

echo
echo "== trezor outputs =="
git ls-files 'ee/maintained-apps/outputs/trezor-suite/*' | while read -r f; do
  echo "--- $f"
  cat -n "$f"
done

echo
echo "== maintained-apps outline =="
ast-grep outline ee/maintained-apps/maintained_apps.go --view compact || true

echo
echo "== architecture/darwin references in maintained_apps.go focused =="
rg -n -C 3 'arm64|x64|darwin|Architecture|architecture|installer_url|platform' ee/maintained-apps/maintained_apps.go

Repository: fleetdm/fleet

Length of output: 15473


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== generated maintained apps files =="
git ls-files 'ee/maintained-apps/outputs/*.json' | sed -n '1,80p'

echo
echo "== apps.json trezor entry location =="
rg -n -C 3 '"trezor-suite/darwin"|"slug": "trezor-suite/darwin"|"platform": "darwin"' ee/maintained-apps/outputs/apps.json

echo
echo "== manifest app schema fields =="
sed -n '1,85p' ee/maintained-apps/maintained_apps.go

echo
echo "== selector/installer usage in server package =="
rg -n -C 3 'FMAManifestApp|ManifestApp|installer_url|InstallerURL|archi|arm64|x64|architecture|platform' cmd server | head -n 250

Repository: fleetdm/fleet

Length of output: 50370


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== trezor generated manifest entry =="
python3 - <<'PY'
import json
from pathlib import Path
p = Path('ee/maintained-apps/outputs/apps.json')
data=json.loads(p.read_text())
item=[x for x in data if x.get('slug')=='trezor-suite/darwin']
print(json.dumps(item, indent=2)[:3000])
PY

echo
echo "== maintained_apps.go full relevant structs =="
sed -n '1,85p' ee/maintained-apps/maintained_apps.go

echo
echo "== focused installer selector references in cmd/server =="
rg -n -C 4 'FMA|InstallerURL|installer_url|architecture|archi|platform|os.*arch|darwin|ManifestApp' cmd/server \
  | grep -E 'FMA|InstallerURL|installer_url|architecture|archi|platform|os\.Arch|darwin|ManifestApp' \
  | head -n 250 || true

echo
echo "== focused installer selector references outside cmd/server =="
rg -n -C 4 'FMA|InstallerURL|installer_url|architecture|archi|platform|darwin|ManifestApp' \
  | cut -f1-25,33-90 \
  | head -n 250 || true

Repository: fleetdm/fleet

Length of output: 354


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== trezor generated manifest entry =="
python3 - <<'PY'
import json
from pathlib import Path
data=json.loads(Path('ee/maintained-apps/outputs/apps.json').read_text())
hits=[]
for slug in data:
    if slug == 'trezor-suite/darwin':
        hits.append(data[slug])
print(json.dumps(hits, indent=2)[:4000])
PY

echo
echo "== maintained_apps.go full relevant structs =="
sed -n '1,85p' ee/maintained-apps/maintained_apps.go

echo
echo "== focused installer selector references in cmd/server =="
rg -n -C 4 'FMA|InstallerURL|installer_url|architecture|archi|platform|os\.Arch|darwin|ManifestApp' cmd/server \
  | head -n 300 || true

echo
echo "== focused installer selector references outside cmd/server =="
rg -n -C 4 'FMA|InstallerURL|installer_url|architecture|archi|platform|darwin|ManifestApp' \
  --glob '!ee/maintained-apps/outputs/apps.json' \
  | head -n 300 || true

Repository: fleetdm/fleet

Length of output: 2839


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== file tree around main app references =="
git ls-files | rg '(^cmd/|^fleetd/|^tools/|^Makefile|apps\.json|maintained_apps\.go|installer|manifest)' | sed -n '1,250p'

echo
echo "== trezor apps.json entries =="
python3 - <<'PY'
import json, re, sys
txt=json.loads(open('ee/maintained-apps/outputs/apps.json', encoding='utf-8').read())
if isinstance(txt, dict):
    for k,v in txt.items():
        if 'trezor' in k.lower() or isinstance(v,str) and 'trezor' in v.lower():
            print(k)
            print(v[:500])
            print("---")
elif isinstance(txt, list):
    for i,v in enumerate(txt):
        if isinstance(v,str) and 'trezor' in v.lower():
            print(i, v)
            print("---")
        elif isinstance(v,dict) and ('trezor' in v.get('slug','').lower() or 'trezor' in v.get('unique_identifier','').lower()):
            print(i, json.dumps(v, indent=2)[:1600])
            print("---")
else:
    print(type(txt))
PY

echo
echo "== architecture selector metadata across repo (focused JSON keys) =="
rg -n -C 3 '"architecture"|"installer_url"|"darwin"|"platform"' ee/maintained-apps --glob '*.json' --glob '*.go' | head -n 300 || true

echo
echo "== installer selection code containing FMAManifestApp/InstallerURL =="
rg -n -C 5 'FMAManifestApp|InstallerURL|installer_url' . --glob '*.go' --glob '*.ts' --glob '*.tsx' --glob '*.js' --glob '*.jsx' | head -n 400 || true

Repository: fleetdm/fleet

Length of output: 50369


🌐 Web query:

Trezor Suite 26.7.4 mac apple silicon intel download Trezor-Suite-26.7.4-mac-arm64.dmg Trezor-Suite-26.7.4-mac-x64.dmg

💡 Result:

As of August 4, 2026, the latest version of Trezor Suite is 26.7.3 [1][2]. There is no version 26.7.4 available [3][2]. For legitimate and secure downloads, you should only use the official Trezor website or the official Trezor Suite GitHub repository [4]. Always verify your download before installation [4]. To download the correct version for your Mac, follow these guidelines: 1. Visit the official download page at https://trezor.io/trezor-suite [4][5]. 2. For Macs with Apple Silicon (M1/M2/M3 chips and later), download the file labeled with "arm64" (e.g., Trezor-Suite-26.7.3-mac-arm64.dmg) [6][7]. 3. For Macs with Intel processors, download the file labeled with "x64" (e.g., Trezor-Suite-26.7.3-mac-x64.dmg) [5][7]. You can verify the release status and find direct links to the latest files at the official GitHub releases page: https://github.com/trezor/trezor-suite/releases [3][4]. Beware of unofficial sources or files claiming to be version 26.7.4, as these may not be legitimate [4].

Citations:


Keep the Trezor DMG compatible with all Darwin hosts.

The trezor-suite/darwin manifest only references the generic darwin.json, so selecting Trezor-Suite-26.7.4-mac-arm64.dmg sends an Apple Silicon-only installer to every macOS host. Add architecture-aware installer metadata or pick an Intel-compatible asset for this package.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/trezor-suite/darwin.json` at line 9, Update the
trezor-suite/darwin manifest’s installer metadata so it serves an installer
compatible with all Darwin hosts: either add architecture-aware URLs for Apple
Silicon and Intel systems, or replace the current arm64-only asset with a
universal/Intel-compatible DMG. Preserve the existing release version and
manifest structure.

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Closing in favor of #50549.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants