**Related issue:** N/A — part of the ongoing Windows Fleet-maintained apps (FMA) parity workstream (letter I). ## What this does Adds **17** Windows Fleet-maintained apps for the letter-I batch. apps.json descriptions follow the house `"<Name> is a …"` convention. **IBM Semeru Runtime Open Edition (Java) — 8 apps** (MSI, machine, x64): JDK 8/11/17/21 and JRE 8/11/17/21. Per-major detection follows the Eclipse Temurin pattern — `name LIKE 'IBM Semeru Runtime Open Edition (JDK|JRE)%' AND publisher = 'Semeru' AND version LIKE '<major>.%'` — so majors and JDK/JRE never cross-match. All 8 share the IBM Semeru logo. **Other apps (9):** - **IronPython 3** — MSI; fuzzy `IronPython 3%` (excludes the EOL v2) - **ImageGlass** — dual-scope MSI, custom `ALLUSERS=1` install - **install4j** — install4j installer (bundled JRE), `-q` - **IrfanView** — custom installer `/silent /allusers=1`; versioned+arch name → fuzzy `IrfanView%` - **iMazing HEIC Converter**, **IsoBuster**, **ImpExpPro** — Inno Setup (`/VERYSILENT`) - **Infix PDF Editor** — Inno, x86 - **Ibis Calculeren voor Bouw** — InstallShield wrapper; uninstall via the MSI UpgradeCode (`uninstall_type: msi`) ## Dropped from this batch (recorded in the workstream tracker) - **IBM Aspera Connect** — MSI installs per-user by default (`ALLUSERS=2`/`MSIINSTALLPERUSER=1`, no machine switch in the manifest) + a rolling `/latest/` URL that 404s on the next release. - **IcedTea-Web** (Azul and AdoptOpenJDK) — both declare a hard, unbundled JRE dependency; it's a JNLP launcher that's dead-on-arrival without Java the FMA won't install (AdoptOpenJDK variant is also archived). - **IronPython 2** — EOL (Python 2). **install4j 9** — legacy 2022 build. **IrfanView PlugIns** — add-on that drops DLLs with no independent ARP entry (undetectable) and depends on the base app. - **Intermedia Unite** and its **Teams Desktop Plugin** — both use non-versioned "latest" URLs (winget-bot auto-updated; the pinned SHA rots each release); the plugin also depends on Teams + Unite. ## Notes - **Ibis Calculeren voor Bouw**, **ImpExpPro**, and **Infix PDF Editor** ship without a catalog icon — no clean ≥256px first-party logo exists for these niche apps (they fall back to the generic icon). - **Ibis** carries some risk: its DisplayName couldn't be verified offline (compressed InstallShield payload) and its installer URL is non-versioned — flagging for the validator; will drop if detection/version fails. - **IsoBuster** uses a non-versioned URL that currently matches the pinned 5.8, so no `ignore_hash`; winget re-ingestion tracks future drift. - Verification (installer type/scope/arch, ProductCode/UpgradeCode, dependencies, silent switches, URL stability, en-US locale) was done per the `new-fma` skill against the winget-pkgs manifests, with several DisplayNames confirmed via `innoextract`/`msitools`. ## Testing - [ ] FMA CI validator (install → detect → uninstall) on the SYSTEM-context Windows runner — pending. - Generated outputs verified locally: all 17 produce valid manifests; per-major Semeru queries and MSI UpgradeCode uninstalls confirmed; all apps.json descriptions present and convention-compliant.
24 lines
2.3 KiB
JSON
24 lines
2.3 KiB
JSON
{
|
|
"versions": [
|
|
{
|
|
"version": "3.4.2.1000",
|
|
"queries": {
|
|
"exists": "SELECT 1 FROM programs WHERE name LIKE 'IronPython 3%' AND publisher = '.NET Foundation';",
|
|
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'IronPython 3%' AND publisher = '.NET Foundation' AND version_compare(version, '3.4.2.1000') < 0);"
|
|
},
|
|
"installer_url": "https://github.com/IronLanguages/ironpython3/releases/download/v3.4.2/IronPython-3.4.2.msi",
|
|
"install_script_ref": "8959087b",
|
|
"uninstall_script_ref": "3b4eecda",
|
|
"sha256": "5ba1f2f163544880d48f6a19b2c518ec7742be0c92c3cee96af96ced2cf5374b",
|
|
"default_categories": [
|
|
"Developer tools"
|
|
],
|
|
"upgrade_code": "{664CD4F7-5C34-441E-B3D0-DBA395E9414F}"
|
|
}
|
|
],
|
|
"refs": {
|
|
"3b4eecda": "# 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\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\nforeach ($product_code in $inst.RelatedProducts('{664CD4F7-5C34-441E-B3D0-DBA395E9414F}')) {\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",
|
|
"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"
|
|
}
|
|
}
|