Add Windows FMAs (letter A): 14 apps#48881
Conversation
…esk, iTunes, Azure Functions Core Tools
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #48881 +/- ##
==========================================
- Coverage 68.10% 68.10% -0.01%
==========================================
Files 3694 3706 +12
Lines 234425 234457 +32
Branches 12464 12317 -147
==========================================
+ Hits 159647 159667 +20
- Misses 60450 60462 +12
Partials 14328 14328
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…idation
Validator results (run 1): Adobe AIR's updater rejects extra switches
('too many arguments'), so the uninstall now runs the registered
UninstallString as-is. AnyDesk reports DisplayVersion 'ad 9.7.9' (prefix
breaks version matching), CutePDF Writer reports ' 4.0' (leading space),
and aimp.ru's download redirects unreliably -- all three deferred.
|
Validation run 1 results — scope reduced from 18 to 15 apps (commit f82a39b) 14/18 passed. Actions taken:
All three drops are recorded in the workstream tracker with reasons. The remaining 15: Corretto 8/11/17, Redshift ODBC Driver, AWS Session Manager Plugin, Azure Functions Core Tools, Agent Ransack, AnyBurn, Allway Sync, Air Explorer, Adobe AIR, alfaview, AVS Image Converter, AVS Media Player, iTunes. |
Script Diff Resultsee/maintained-apps/outputs/adobe-air/windows.json=== Install Script (no changes) ===
=== Uninstall // 63355e67 -> 7fd55b2a ===
--- /tmp/old.AEm6Xl 2026-07-07 19:15:42.974417386 +0000
+++ /tmp/new.gBDweC 2026-07-07 19:15:42.974417386 +0000
@@ -2,8 +2,9 @@
#
# The inner MSI sets ARPSYSTEMCOMPONENT, so the visible ARP entry is the
# vendor-written key "Adobe AIR" whose UninstallString runs
-# "...\Adobe AIR Updater.exe" -arp:uninstall. We take that command from the
-# registry and add -silent to keep it quiet.
+# "...\Adobe AIR Updater.exe" -arp:uninstall. Run that command exactly as
+# registered: the updater rejects any extra switches ("too many arguments",
+# exit 2), including -silent.
$softwareName = "Adobe AIR"
@@ -34,8 +35,6 @@
$exe = $raw; $exeArgs = ""
}
- if ($exeArgs -notmatch '(?i)-silent') { $exeArgs = "$exeArgs -silent".Trim() }
-
Write-Host "Uninstall command: $exe"
Write-Host "Uninstall args: $exeArgs"
$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -NoNewWindow -PassThru -Waitee/maintained-apps/outputs/agent-ransack/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/air-explorer/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/alfaview/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/allway-sync/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/amazon-corretto-11/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/amazon-corretto-17/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/amazon-corretto-8/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/amazon-redshift-odbc-driver/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/anyburn/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/avs-image-converter/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/avs-media-player/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/aws-session-manager-plugin/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/azure-functions-core-tools/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/itunes/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) === |
The updater's -arp:uninstall hangs on UI in the SYSTEM session (validator
timeout after 11 minutes) and rejects extra switches like -silent
('too many arguments'), so there is no silent uninstall path.
|
Validation run 2: 14/15 — Adobe AIR dropped (commit 318cb45) The remaining failure was Adobe AIR's uninstall: run 1 showed the updater rejects |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (9)
📒 Files selected for processing (54)
WalkthroughThis PR adds fourteen new maintained Windows applications to the fleet catalog: Agent Ransack, Air Explorer, alfaview, Allway Sync, Amazon Corretto (8/11/17), Amazon Redshift ODBC Driver, AnyBurn, AVS Image Converter, AVS Media Player, AWS Session Manager Plugin, Azure Functions Core Tools, and iTunes. Changes include new winget input JSON manifests, standalone and embedded PowerShell install/uninstall scripts (handling MSI, EXE, and zip installers with registry-based uninstall lookup), output windows.json definitions per app, new entries in the shared apps.json registry, and new frontend React SVG icon components wired into the SOFTWARE_NAME_TO_ICON_MAP mapping. Changes
Sequence Diagram(s)sequenceDiagram
participant InputManifest as winget input JSON
participant InstallScript
participant Msiexec_or_EXE
participant Registry
participant OutputManifest as output windows.json
InputManifest->>InstallScript: reference install script path
InstallScript->>Msiexec_or_EXE: run installer silently
Msiexec_or_EXE-->>InstallScript: exit code
InstallScript-->>OutputManifest: propagate normalized exit code
Registry->>OutputManifest: uninstall entry lookup for uninstall script
Related issues: None found in provided context. Possibly related PRs
Suggested labels: enhancement, maintained-apps, frontend Suggested reviewers: (none available from provided context) 🐰 A rabbit hops through winget's den, ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Pull request overview
This PR expands Fleet’s Windows maintained apps catalog (“FMAs”) by adding new Winget input manifests + install/uninstall scripts, generating corresponding output manifests, and wiring up new Software page icons/mappings so these apps show up with branded icons.
Changes:
- Added/updated Windows maintained-app output manifests (versions, queries, installer URLs, scripts) and appended new entries to
apps.json. - Added new Winget input manifests and PowerShell install/uninstall scripts for the new Windows apps.
- Added new frontend icon components and updated the software-name → icon map.
Reviewed changes
Copilot reviewed 54 out of 63 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/pages/SoftwarePage/components/icons/Itunes.tsx | Adds iTunes icon component. |
| frontend/pages/SoftwarePage/components/icons/AzureFunctionsCoreTools.tsx | Adds Azure Functions Core Tools icon component. |
| frontend/pages/SoftwarePage/components/icons/AvsMediaPlayer.tsx | Adds AVS Media Player icon component. |
| frontend/pages/SoftwarePage/components/icons/AllwaySync.tsx | Adds Allway Sync icon component. |
| frontend/pages/SoftwarePage/components/icons/Alfaview.tsx | Adds alfaview icon component. |
| frontend/pages/SoftwarePage/components/icons/AirExplorer.tsx | Adds Air Explorer icon component. |
| frontend/pages/SoftwarePage/components/icons/AgentRansack.tsx | Adds Agent Ransack icon component. |
| frontend/pages/SoftwarePage/components/icons/index.ts | Registers new icons + extends SOFTWARE_NAME_TO_ICON_MAP. |
| ee/maintained-apps/outputs/itunes/windows.json | Adds generated Windows maintained-app output for iTunes, including embedded scripts. |
| ee/maintained-apps/outputs/azure-functions-core-tools/windows.json | Adds generated Windows maintained-app output for Azure Functions Core Tools, including embedded scripts. |
| ee/maintained-apps/outputs/aws-session-manager-plugin/windows.json | Adds generated Windows maintained-app output for AWS Session Manager Plugin, including embedded scripts. |
| ee/maintained-apps/outputs/avs-media-player/windows.json | Adds generated Windows maintained-app output for AVS Media Player, including embedded scripts. |
| ee/maintained-apps/outputs/avs-image-converter/windows.json | Adds generated Windows maintained-app output for AVS Image Converter, including embedded scripts. |
| ee/maintained-apps/outputs/anyburn/windows.json | Adds generated Windows maintained-app output for AnyBurn, including embedded scripts. |
| ee/maintained-apps/outputs/amazon-redshift-odbc-driver/windows.json | Adds generated Windows maintained-app output for Amazon Redshift ODBC Driver, including embedded scripts. |
| ee/maintained-apps/outputs/amazon-corretto-8/windows.json | Adds generated Windows maintained-app output for Amazon Corretto 8, including embedded scripts. |
| ee/maintained-apps/outputs/amazon-corretto-17/windows.json | Adds generated Windows maintained-app output for Amazon Corretto 17, including embedded scripts. |
| ee/maintained-apps/outputs/amazon-corretto-11/windows.json | Adds generated Windows maintained-app output for Amazon Corretto 11, including embedded scripts. |
| ee/maintained-apps/outputs/allway-sync/windows.json | Adds generated Windows maintained-app output for Allway Sync, including embedded scripts. |
| ee/maintained-apps/outputs/alfaview/windows.json | Adds generated Windows maintained-app output for alfaview, including embedded scripts. |
| ee/maintained-apps/outputs/air-explorer/windows.json | Adds generated Windows maintained-app output for Air Explorer, including embedded scripts. |
| ee/maintained-apps/outputs/agent-ransack/windows.json | Adds generated Windows maintained-app output for Agent Ransack, including embedded scripts. |
| ee/maintained-apps/outputs/apps.json | Adds new app metadata entries to the catalog index. |
| ee/maintained-apps/inputs/winget/scripts/itunes_install.ps1 | Adds iTunes EXE wrapper silent install script. |
| ee/maintained-apps/inputs/winget/scripts/itunes_uninstall.ps1 | Adds iTunes uninstall script that finds MSI ProductCode via ARP. |
| ee/maintained-apps/inputs/winget/scripts/azure-functions-core-tools_install.ps1 | Adds MSI install script forcing ALLUSERS=1. |
| ee/maintained-apps/inputs/winget/scripts/aws-session-manager-plugin_install.ps1 | Adds burn bundle silent install script. |
| ee/maintained-apps/inputs/winget/scripts/aws-session-manager-plugin_uninstall.ps1 | Adds burn/MSI-aware uninstall script. |
| ee/maintained-apps/inputs/winget/scripts/avs-media-player_install.ps1 | Adds silent Inno Setup install script. |
| ee/maintained-apps/inputs/winget/scripts/avs-media-player_uninstall.ps1 | Adds uninstall script matching versioned ARP DisplayName prefix. |
| ee/maintained-apps/inputs/winget/scripts/avs-image-converter_install.ps1 | Adds silent Inno Setup install script. |
| ee/maintained-apps/inputs/winget/scripts/avs-image-converter_uninstall.ps1 | Adds uninstall script matching versioned ARP DisplayName prefix. |
| ee/maintained-apps/inputs/winget/scripts/anyburn_install.ps1 | Adds silent NSIS install script. |
| ee/maintained-apps/inputs/winget/scripts/anyburn_uninstall.ps1 | Adds NSIS uninstall script. |
| ee/maintained-apps/inputs/winget/scripts/air-explorer_install.ps1 | Adds silent NSIS install script. |
| ee/maintained-apps/inputs/winget/scripts/air-explorer_uninstall.ps1 | Adds NSIS uninstall script. |
| ee/maintained-apps/inputs/winget/scripts/agent-ransack_install.ps1 | Adds zip extraction + MSI install script for Agent Ransack. |
| ee/maintained-apps/inputs/winget/scripts/agent-ransack_uninstall.ps1 | Adds MSI uninstall script locating ProductCode via ARP. |
| ee/maintained-apps/inputs/winget/itunes.json | Adds Winget input manifest for iTunes. |
| ee/maintained-apps/inputs/winget/azure-functions-core-tools.json | Adds Winget input manifest for Azure Functions Core Tools. |
| ee/maintained-apps/inputs/winget/aws-session-manager-plugin.json | Adds Winget input manifest for AWS Session Manager Plugin. |
| ee/maintained-apps/inputs/winget/avs-media-player.json | Adds Winget input manifest for AVS Media Player. |
| ee/maintained-apps/inputs/winget/avs-image-converter.json | Adds Winget input manifest for AVS Image Converter. |
| ee/maintained-apps/inputs/winget/anyburn.json | Adds Winget input manifest for AnyBurn. |
| ee/maintained-apps/inputs/winget/amazon-redshift-odbc-driver.json | Adds Winget input manifest for Amazon Redshift ODBC Driver. |
| ee/maintained-apps/inputs/winget/amazon-corretto-8.json | Adds Winget input manifest for Amazon Corretto 8. |
| ee/maintained-apps/inputs/winget/amazon-corretto-17.json | Adds Winget input manifest for Amazon Corretto 17. |
| ee/maintained-apps/inputs/winget/amazon-corretto-11.json | Adds Winget input manifest for Amazon Corretto 11. |
| ee/maintained-apps/inputs/winget/allway-sync.json | Adds Winget input manifest for Allway Sync. |
| ee/maintained-apps/inputs/winget/alfaview.json | Adds Winget input manifest for alfaview. |
| ee/maintained-apps/inputs/winget/air-explorer.json | Adds Winget input manifest for Air Explorer. |
| ee/maintained-apps/inputs/winget/agent-ransack.json | Adds Winget input manifest for Agent Ransack. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| "aws sam command line interface": AwsSamCli, | ||
| "aws session manager plugin": AwsCli, | ||
| "aws vpn client": AwsVpnClient, |
| } | ||
| ], | ||
| "refs": { | ||
| "105b8804": "$product_code = '{E8687AC8-92C2-4516-8A3A-A7829B82C57B}'\n$timeoutSeconds = 300 # 5 minute timeout\n\n# Fleet uninstalls app using product code that's extracted on upload\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\nif (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n}\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\n# Check exit code and output result\nif ($successCodes -contains $process.ExitCode) {\n Write-Output \"Exit 0\"\n Exit 0\n} else {\n Write-Output \"Exit $($process.ExitCode)\"\n Exit $process.ExitCode\n}\n", |
| ], | ||
| "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", | ||
| "96f31cd6": "$product_code = '{51CDB2E7-BFE8-41A5-B1DC-2AFFD139C646}'\n$timeoutSeconds = 300 # 5 minute timeout\n\n# Fleet uninstalls app using product code that's extracted on upload\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\nif (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n}\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\n# Check exit code and output result\nif ($successCodes -contains $process.ExitCode) {\n Write-Output \"Exit 0\"\n Exit 0\n} else {\n Write-Output \"Exit $($process.ExitCode)\"\n Exit $process.ExitCode\n}\n" |
| $msi = Get-ChildItem -Path $extractPath -Filter "*.msi" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 | ||
| if (-not $msi) { | ||
| Write-Host "Error: MSI not found under $extractPath" | ||
| Exit 1 | ||
| } |
**Related issue:** N/A — part of the Windows Fleet-maintained apps catalog expansion (letter B batch; follows #48872 and #48881). Adds six new Windows Fleet-maintained apps: | App | winget package | Installer | Notes | |-----|----------------|-----------|-------| | BandiView | `Bandisoft.BandiView` | EXE (NSIS-style), machine, x64 | Unversioned InstallerUrl → `ignore_hash` (URL verified to serve the binary reliably without Referer tricks). DisplayName "BandiView" stable across releases. | | BleachBit | `BleachBit.BleachBit` | EXE (NsisMultiUser), machine, x86 | Install script passes the case-sensitive `/allusers /S` — without `/allusers` the NsisMultiUser installer's scope is ambiguous. winget declares a VCRedist 2010 x86 dependency Fleet can't satisfy; noted as a caveat. | | Bulk Crap Uninstaller | `Klocman.BulkCrapUninstaller` | EXE (Inno), machine, x86 | ARP DisplayName is versioned ("BCUninstaller 6.2.0.0") and never matches the friendly name, so `unique_identifier` "BCUninstaller" + `fuzzy_match_name`. Registry version is 4-part vs winget's "6.2" — `version_compare` pads, verified consistent. | | BrowserStackLocal | `BrowserStack.BrowserStackLocal` | MSI (WiX), machine, x64 | Clean MSI (ALLUSERS=1, identity verified via msiinfo). Unversioned InstallerUrl → `ignore_hash`. | | Burp Suite Professional | `PortSwigger.BurpSuite.Professional` | EXE (install4j), machine, x64 | Mirrors the existing Burp Suite Community FMA: `-q -Dinstall4j.suppressUnattendedReboot=true` plus the load-bearing `-dir` into Program Files (install4j defaults to per-user otherwise). DisplayName is versioned **without** "Edition" ("Burp Suite Professional 2026.3.3"), unlike Community — fuzzy pattern `Burp Suite Professional %` can't collide with Community's. | | Bytello Share | `Bytello.BytelloShare` | EXE (NSIS), machine, x86 | Uses the nullsoft `agent=d` variant whose ARP identity ("Bytello Share" / publisher "Bytello Share") matches real-world inventory; the zip variant registers a different name ("BytelloShare") and its nested-MSI path is version-pinned and already stale. Vendor URL is a latest-pointer already ahead of winget → `ignore_hash`. **Note:** the input says `installer_type: "msi"` — the ingester classifies this nullsoft entry as msi because its URL has no file extension (vendor-type → URL-extension → machine-scope fallback chain in `ingester.go`); the custom scripts handle the actual NSIS exe. | Considered but **not** added (recorded in the workstream tracker): - **Bambu Studio** (`Bambulab.Bambustudio`): the uninstaller shows a keep-user-data confirmation dialog even with `/S` (deployment guides work around it with Send-Keys, impossible in a SYSTEM session) — same failure class that disqualified Adobe AIR in the letter A batch. - **Bridge Designer** (`StephenRessler.BridgeDesigner`): installer URL 404s (file removed from SourceForge) and the desktop product was discontinued July 1, 2026 in favor of a browser-based edition. - **BurnAware Free** (`Burnaware.BurnAwareFree`): the vendor deletes each old release URL — the winget-pinned installer already redirects to their homepage, so pinned downloads break every release cycle. Registry identities were verified per app (msiinfo Property tables for MSIs; vendor installer sources, winget AppsAndFeaturesEntries, and uninstall-database corroboration for EXEs). Installer SHAs verified against manifests where URLs are version-pinned; unversioned URLs use `ignore_hash` per the TeamViewer/Chrome precedent. Icons generated via `tools/software/icons/generate-icons.sh`. # Checklist for submitter - [x] Input data is properly validated, `SELECT *` is avoided, SQL injection is prevented (using placeholders for values in statements), JS inline code is prevented especially for url redirects, and untrusted data interpolated into shell scripts/commands is validated against shell metacharacters. - [x] Timeouts are implemented and retries are limited to avoid infinite loops ## Testing - [ ] QA'd all new/changed functionality manually (relying on the FMA CI validator for Windows install/uninstall validation)
This pull request adds support for several new Windows applications to the maintained apps catalog, primarily by introducing new JSON manifest files for each app and, in some cases, associated PowerShell install/uninstall scripts. These additions expand the catalog's coverage of productivity, developer, utility, and communication tools, and include detailed installation and uninstallation logic for certain apps.
New application manifests:
Custom installation and uninstallation scripts:
These changes improve the breadth and automation capabilities of the maintained apps catalog, especially for environments that require silent and reliable software deployment and removal.…esk, iTunes, Azure Functions Core Tools
Related issue: Resolves #
Checklist for submitter
If some of the following don't apply, delete the relevant line.
Changes file added for user-visible changes in
changes/,orbit/changes/oree/fleetd-chrome/changes.See Changes files for more information.
Input data is properly validated,
SELECT *is avoided, SQL injection is prevented (using placeholders for values in statements), JS inline code is prevented especially for url redirects, and untrusted data interpolated into shell scripts/commands is validated against shell metacharacters.Timeouts are implemented and retries are limited to avoid infinite loops
If paths of existing endpoints are modified without backwards compatibility, checked the frontend/CLI for any necessary changes
Testing
Added/updated automated tests
Where appropriate, automated tests simulate multiple hosts and test for host isolation (updates to one hosts's records do not affect another)
QA'd all new/changed functionality manually
For unreleased bug fixes in a release candidate, one of:
Database migrations
COLLATE utf8mb4_unicode_ci).New Fleet configuration settings
If you didn't check the box above, follow this checklist for GitOps-enabled settings:
fleetctl generate-gitopsfleetd/orbit/Fleet Desktop
runtime.GOOSis used as needed to isolate changesSummary by CodeRabbit