From e1ab5b56fd27765228cbff9ef8e5ab69a1a18afb Mon Sep 17 00:00:00 2001 From: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> Date: Tue, 14 Jul 2026 21:33:12 -0500 Subject: [PATCH] Add Windows FMAs (letter G): 13 apps (#49281) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Related issue:** N/A — part of the ongoing Windows Fleet-maintained apps (FMA) parity workstream (letter G). ## What this does Adds **19** Windows Fleet-maintained apps for the letter-G batch. Each app has a winget-sourced input, generated output manifest, and (where a cleanly-licensed ≥256px icon was found) a catalog icon. **MSI (clean, upgrade-code uninstall):** - Gadwin PrintScreen, Gadwin PrintScreen Pro, Gadwin ScreenRecorder — free + the two paid editions are distinct products (separate ProductCodes/UpgradeCodes), so each matches by exact ARP name to avoid cross-matching - GitHub CLI, Go, gsudo, grepWin - GeoGebra Classic — the machine MSI; the winget manifest's top-level `Scope: user` forced `installer_scope: user` in the input + custom machine-MSI install/uninstall scripts - Google Ads Editor — dual user/machine WiX MSI; custom install forces `ALLUSERS=1` **MSI (custom uninstall):** - GoodSync — `ignore_hash` (non-versioned "latest" URL drifts from the manifest version/SHA, Chrome/TeamViewer pattern); process-stopping uninstall for its tray app + sync service **NSIS / exe (custom install + uninstall):** - Google Web Designer, Gpg4win (x86-only; versioned ARP name → fuzzy match), GoAnywhere OpenPGP Studio (install4j `-q`), GoldenDict-ng (maintained fork; name-only exists query), Graphviz - Streamlabs Desktop — electron-builder `/S /allusers` + process-stopping uninstall (versioned ARP name → fuzzy match) **WiX burn / electron (custom install + uninstall):** - Garmin BaseCamp, Garmin Express (`ignore_hash` — rolling URL + self-updating app), Galaxy Modeler (`/S /allusers`) ## Dropped from this batch (recorded in the workstream tracker) - **Genesys Cloud Background Assistant** — WiX burn bootstrapper with a hard `VCRedist 2015+ x86` dependency Fleet won't resolve, x86-only, non-standard burn uninstall. - **GoldenDict.GoldenDict** — stale original, superseded by the actively-maintained `xiaoyifang.GoldenDict-ng` fork (shipped instead). - **GeoGebra GraphingCalculator + Geometry** — user-scope-only exe installers (no machine option); shipped GeoGebra Classic (MSI) instead. - **Garden Gnome Package Viewer** — `ggnome.com` download URLs sit behind a Cloudflare `cf-mitigated: challenge` and return 403 to all automated requests (even with the Chrome UA), so Fleet's downloader can't fetch it. ## Notes - **Gadwin ScreenRecorder** and **Garmin Express** ship without a custom catalog icon — no cleanly-licensed ≥256px source was found (they fall back to the generic icon). - Verification (winget manifest identity, installer type/scope/arch, ProductCode/UpgradeCode, silent switches, URL stability) was done per the `new-fma` skill against the winget-pkgs manifests and, where needed, the real installers. ## Testing - [ ] FMA CI validator (install → detect → uninstall) on the SYSTEM-context Windows runner — pending. - Generated outputs verified locally: all 19 produce valid manifests; MSI apps carry the correct UpgradeCode-based uninstall; exists/patched queries reviewed for name + publisher correctness. ## Summary by CodeRabbit * **New Features** * Added maintained Windows software catalog entries for 13 applications (Gadwin PrintScreen/Pro/ScreenRecorder, Galaxy Modeler, Garmin BaseCamp, GeoGebra Classic, Go, GoAnywhere OpenPGP Studio, GoldenDict-ng, Google Ads Editor, Google Web Designer, Graphviz, grepWin). * Enabled silent install/upgrade detection and automated uninstall behavior for the newly supported apps. * Added app icons and expanded software-name keyword matching for improved identification in the catalog. --- .../inputs/winget/gadwin-printscreen-pro.json | 12 +++ .../inputs/winget/gadwin-printscreen.json | 12 +++ .../inputs/winget/gadwin-screenrecorder.json | 12 +++ .../inputs/winget/galaxy-modeler.json | 14 +++ .../inputs/winget/garmin-basecamp.json | 15 +++ .../inputs/winget/geogebra-classic.json | 14 +++ ee/maintained-apps/inputs/winget/go.json | 13 +++ .../winget/goanywhere-openpgp-studio.json | 14 +++ .../inputs/winget/goldendict-ng.json | 15 +++ .../inputs/winget/google-ads-editor.json | 13 +++ .../inputs/winget/google-web-designer.json | 14 +++ .../inputs/winget/graphviz.json | 14 +++ ee/maintained-apps/inputs/winget/grepwin.json | 12 +++ .../winget/scripts/galaxy-modeler_install.ps1 | 22 +++++ .../scripts/galaxy-modeler_uninstall.ps1 | 56 +++++++++++ .../scripts/garmin-basecamp_install.ps1 | 22 +++++ .../scripts/garmin-basecamp_uninstall.ps1 | 51 ++++++++++ .../scripts/geogebra-classic_install.ps1 | 24 +++++ .../scripts/geogebra-classic_uninstall.ps1 | 46 +++++++++ .../goanywhere-openpgp-studio_install.ps1 | 22 +++++ .../goanywhere-openpgp-studio_uninstall.ps1 | 54 +++++++++++ .../winget/scripts/goldendict-ng_install.ps1 | 22 +++++ .../scripts/goldendict-ng_uninstall.ps1 | 57 +++++++++++ .../scripts/google-ads-editor_install.ps1 | 28 ++++++ .../scripts/google-web-designer_install.ps1 | 22 +++++ .../scripts/google-web-designer_uninstall.ps1 | 52 ++++++++++ .../winget/scripts/graphviz_install.ps1 | 22 +++++ .../winget/scripts/graphviz_uninstall.ps1 | 52 ++++++++++ ee/maintained-apps/outputs/apps.json | 91 ++++++++++++++++++ .../gadwin-printscreen-pro/windows.json | 23 +++++ .../outputs/gadwin-printscreen/windows.json | 23 +++++ .../gadwin-screenrecorder/windows.json | 23 +++++ .../outputs/galaxy-modeler/windows.json | 22 +++++ .../outputs/garmin-basecamp/windows.json | 22 +++++ .../outputs/geogebra-classic/windows.json | 22 +++++ ee/maintained-apps/outputs/go/windows.json | 23 +++++ .../goanywhere-openpgp-studio/windows.json | 22 +++++ .../outputs/goldendict-ng/windows.json | 22 +++++ .../outputs/google-ads-editor/windows.json | 23 +++++ .../outputs/google-web-designer/windows.json | 22 +++++ .../outputs/graphviz/windows.json | 22 +++++ .../outputs/grepwin/windows.json | 23 +++++ .../components/icons/GadwinPrintscreen.tsx | 14 +++ .../components/icons/GadwinPrintscreenPro.tsx | 14 +++ .../components/icons/GalaxyModeler.tsx | 14 +++ .../components/icons/GarminBasecamp.tsx | 14 +++ .../components/icons/GeogebraClassic.tsx | 14 +++ .../SoftwarePage/components/icons/Go.tsx | 14 +++ .../icons/GoanywhereOpenpgpStudio.tsx | 14 +++ .../components/icons/GoldendictNg.tsx | 14 +++ .../components/icons/GoogleAdsEditor.tsx | 14 +++ .../components/icons/GoogleWebDesigner.tsx | 14 +++ .../components/icons/Graphviz.tsx | 14 +++ .../SoftwarePage/components/icons/Grepwin.tsx | 14 +++ .../SoftwarePage/components/icons/index.ts | 24 +++++ .../app-icon-gadwin-printscreen-60x60@2x.png | Bin 0 -> 17975 bytes ...p-icon-gadwin-printscreen-pro-60x60@2x.png | Bin 0 -> 17975 bytes .../app-icon-galaxy-modeler-60x60@2x.png | Bin 0 -> 8288 bytes .../app-icon-garmin-basecamp-60x60@2x.png | Bin 0 -> 23647 bytes .../app-icon-geogebra-classic-60x60@2x.png | Bin 0 -> 8959 bytes .../assets/images/app-icon-go-60x60@2x.png | Bin 0 -> 5412 bytes ...con-goanywhere-openpgp-studio-60x60@2x.png | Bin 0 -> 4294 bytes .../app-icon-goldendict-ng-60x60@2x.png | Bin 0 -> 15234 bytes .../app-icon-google-ads-editor-60x60@2x.png | Bin 0 -> 6455 bytes .../app-icon-google-web-designer-60x60@2x.png | Bin 0 -> 5992 bytes .../images/app-icon-graphviz-60x60@2x.png | Bin 0 -> 28617 bytes .../images/app-icon-grepwin-60x60@2x.png | Bin 0 -> 6876 bytes 67 files changed, 1301 insertions(+) create mode 100644 ee/maintained-apps/inputs/winget/gadwin-printscreen-pro.json create mode 100644 ee/maintained-apps/inputs/winget/gadwin-printscreen.json create mode 100644 ee/maintained-apps/inputs/winget/gadwin-screenrecorder.json create mode 100644 ee/maintained-apps/inputs/winget/galaxy-modeler.json create mode 100644 ee/maintained-apps/inputs/winget/garmin-basecamp.json create mode 100644 ee/maintained-apps/inputs/winget/geogebra-classic.json create mode 100644 ee/maintained-apps/inputs/winget/go.json create mode 100644 ee/maintained-apps/inputs/winget/goanywhere-openpgp-studio.json create mode 100644 ee/maintained-apps/inputs/winget/goldendict-ng.json create mode 100644 ee/maintained-apps/inputs/winget/google-ads-editor.json create mode 100644 ee/maintained-apps/inputs/winget/google-web-designer.json create mode 100644 ee/maintained-apps/inputs/winget/graphviz.json create mode 100644 ee/maintained-apps/inputs/winget/grepwin.json create mode 100644 ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_install.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_uninstall.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_install.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_uninstall.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/geogebra-classic_install.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/geogebra-classic_uninstall.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_install.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_uninstall.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/goldendict-ng_install.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/goldendict-ng_uninstall.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/google-ads-editor_install.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/google-web-designer_install.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/google-web-designer_uninstall.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/graphviz_install.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/graphviz_uninstall.ps1 create mode 100644 ee/maintained-apps/outputs/gadwin-printscreen-pro/windows.json create mode 100644 ee/maintained-apps/outputs/gadwin-printscreen/windows.json create mode 100644 ee/maintained-apps/outputs/gadwin-screenrecorder/windows.json create mode 100644 ee/maintained-apps/outputs/galaxy-modeler/windows.json create mode 100644 ee/maintained-apps/outputs/garmin-basecamp/windows.json create mode 100644 ee/maintained-apps/outputs/geogebra-classic/windows.json create mode 100644 ee/maintained-apps/outputs/go/windows.json create mode 100644 ee/maintained-apps/outputs/goanywhere-openpgp-studio/windows.json create mode 100644 ee/maintained-apps/outputs/goldendict-ng/windows.json create mode 100644 ee/maintained-apps/outputs/google-ads-editor/windows.json create mode 100644 ee/maintained-apps/outputs/google-web-designer/windows.json create mode 100644 ee/maintained-apps/outputs/graphviz/windows.json create mode 100644 ee/maintained-apps/outputs/grepwin/windows.json create mode 100644 frontend/pages/SoftwarePage/components/icons/GadwinPrintscreen.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/GadwinPrintscreenPro.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/GalaxyModeler.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/GarminBasecamp.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/GeogebraClassic.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Go.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/GoanywhereOpenpgpStudio.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/GoldendictNg.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/GoogleAdsEditor.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/GoogleWebDesigner.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Graphviz.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Grepwin.tsx create mode 100644 website/assets/images/app-icon-gadwin-printscreen-60x60@2x.png create mode 100644 website/assets/images/app-icon-gadwin-printscreen-pro-60x60@2x.png create mode 100644 website/assets/images/app-icon-galaxy-modeler-60x60@2x.png create mode 100644 website/assets/images/app-icon-garmin-basecamp-60x60@2x.png create mode 100644 website/assets/images/app-icon-geogebra-classic-60x60@2x.png create mode 100644 website/assets/images/app-icon-go-60x60@2x.png create mode 100644 website/assets/images/app-icon-goanywhere-openpgp-studio-60x60@2x.png create mode 100644 website/assets/images/app-icon-goldendict-ng-60x60@2x.png create mode 100644 website/assets/images/app-icon-google-ads-editor-60x60@2x.png create mode 100644 website/assets/images/app-icon-google-web-designer-60x60@2x.png create mode 100644 website/assets/images/app-icon-graphviz-60x60@2x.png create mode 100644 website/assets/images/app-icon-grepwin-60x60@2x.png diff --git a/ee/maintained-apps/inputs/winget/gadwin-printscreen-pro.json b/ee/maintained-apps/inputs/winget/gadwin-printscreen-pro.json new file mode 100644 index 0000000000..e96f555372 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/gadwin-printscreen-pro.json @@ -0,0 +1,12 @@ +{ + "name": "Gadwin PrintScreen Pro", + "slug": "gadwin-printscreen-pro/windows", + "package_identifier": "Gadwin.PrintScreen.Pro", + "unique_identifier": "Gadwin PrintScreenPro (64-Bit)", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Productivity" + ] +} diff --git a/ee/maintained-apps/inputs/winget/gadwin-printscreen.json b/ee/maintained-apps/inputs/winget/gadwin-printscreen.json new file mode 100644 index 0000000000..806f2ab5d2 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/gadwin-printscreen.json @@ -0,0 +1,12 @@ +{ + "name": "Gadwin PrintScreen", + "slug": "gadwin-printscreen/windows", + "package_identifier": "Gadwin.PrintScreen", + "unique_identifier": "Gadwin PrintScreen (64-Bit)", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Productivity" + ] +} diff --git a/ee/maintained-apps/inputs/winget/gadwin-screenrecorder.json b/ee/maintained-apps/inputs/winget/gadwin-screenrecorder.json new file mode 100644 index 0000000000..37f4e1e62c --- /dev/null +++ b/ee/maintained-apps/inputs/winget/gadwin-screenrecorder.json @@ -0,0 +1,12 @@ +{ + "name": "Gadwin ScreenRecorder", + "slug": "gadwin-screenrecorder/windows", + "package_identifier": "Gadwin.ScreenRecorder", + "unique_identifier": "Gadwin ScreenRecorder (64-Bit)", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Productivity" + ] +} diff --git a/ee/maintained-apps/inputs/winget/galaxy-modeler.json b/ee/maintained-apps/inputs/winget/galaxy-modeler.json new file mode 100644 index 0000000000..92773338e9 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/galaxy-modeler.json @@ -0,0 +1,14 @@ +{ + "name": "Galaxy Modeler", + "slug": "galaxy-modeler/windows", + "package_identifier": "Ideamerit.GalaxyModeler", + "unique_identifier": "Galaxy Modeler", + "installer_arch": "x64", + "installer_type": "exe", + "installer_scope": "machine", + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_install.ps1", + "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_uninstall.ps1", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/garmin-basecamp.json b/ee/maintained-apps/inputs/winget/garmin-basecamp.json new file mode 100644 index 0000000000..a00a2acb4a --- /dev/null +++ b/ee/maintained-apps/inputs/winget/garmin-basecamp.json @@ -0,0 +1,15 @@ +{ + "name": "Garmin BaseCamp", + "slug": "garmin-basecamp/windows", + "package_identifier": "Garmin.BaseCamp", + "unique_identifier": "Garmin BaseCamp", + "installer_arch": "x86", + "installer_type": "exe", + "installer_scope": "machine", + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_install.ps1", + "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_uninstall.ps1", + "default_categories": [ + "Productivity" + ], + "program_publisher": "Garmin Ltd. or its subsidiaries" +} diff --git a/ee/maintained-apps/inputs/winget/geogebra-classic.json b/ee/maintained-apps/inputs/winget/geogebra-classic.json new file mode 100644 index 0000000000..d75a054f04 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/geogebra-classic.json @@ -0,0 +1,14 @@ +{ + "name": "GeoGebra Classic", + "slug": "geogebra-classic/windows", + "package_identifier": "GeoGebra.Classic", + "unique_identifier": "GeoGebra Classic", + "installer_arch": "x86", + "installer_type": "msi", + "installer_scope": "user", + "default_categories": [ + "Productivity" + ], + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/geogebra-classic_install.ps1", + "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/geogebra-classic_uninstall.ps1" +} diff --git a/ee/maintained-apps/inputs/winget/go.json b/ee/maintained-apps/inputs/winget/go.json new file mode 100644 index 0000000000..f52a7162e0 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/go.json @@ -0,0 +1,13 @@ +{ + "name": "Go", + "slug": "go/windows", + "package_identifier": "GoLang.Go", + "unique_identifier": "Go Programming Language", + "fuzzy_match_name": "Go Programming Language%", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/goanywhere-openpgp-studio.json b/ee/maintained-apps/inputs/winget/goanywhere-openpgp-studio.json new file mode 100644 index 0000000000..44f93801fb --- /dev/null +++ b/ee/maintained-apps/inputs/winget/goanywhere-openpgp-studio.json @@ -0,0 +1,14 @@ +{ + "name": "GoAnywhere OpenPGP Studio", + "slug": "goanywhere-openpgp-studio/windows", + "package_identifier": "Fortra.GoAnywhereOpenPGPStudio", + "unique_identifier": "GoAnywhere OpenPGP Studio", + "installer_arch": "x64", + "installer_type": "exe", + "installer_scope": "machine", + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_install.ps1", + "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_uninstall.ps1", + "default_categories": [ + "Security" + ] +} diff --git a/ee/maintained-apps/inputs/winget/goldendict-ng.json b/ee/maintained-apps/inputs/winget/goldendict-ng.json new file mode 100644 index 0000000000..d4741bf884 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/goldendict-ng.json @@ -0,0 +1,15 @@ +{ + "name": "GoldenDict-ng", + "slug": "goldendict-ng/windows", + "package_identifier": "xiaoyifang.GoldenDict-ng", + "unique_identifier": "GoldenDict-ng", + "installer_arch": "x64", + "installer_type": "exe", + "installer_scope": "machine", + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/goldendict-ng_install.ps1", + "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/goldendict-ng_uninstall.ps1", + "default_categories": [ + "Productivity" + ], + "exists_query": "SELECT 1 FROM programs WHERE name = 'GoldenDict-ng';" +} diff --git a/ee/maintained-apps/inputs/winget/google-ads-editor.json b/ee/maintained-apps/inputs/winget/google-ads-editor.json new file mode 100644 index 0000000000..93e4d6edf6 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/google-ads-editor.json @@ -0,0 +1,13 @@ +{ + "name": "Google Ads Editor", + "slug": "google-ads-editor/windows", + "package_identifier": "Google.AdsEditor", + "unique_identifier": "Google Ads Editor", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/google-ads-editor_install.ps1", + "default_categories": [ + "Productivity" + ] +} diff --git a/ee/maintained-apps/inputs/winget/google-web-designer.json b/ee/maintained-apps/inputs/winget/google-web-designer.json new file mode 100644 index 0000000000..2f864a7dd4 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/google-web-designer.json @@ -0,0 +1,14 @@ +{ + "name": "Google Web Designer", + "slug": "google-web-designer/windows", + "package_identifier": "Google.GoogleWebDesigner", + "unique_identifier": "Google Web Designer", + "installer_arch": "x64", + "installer_type": "exe", + "installer_scope": "machine", + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/google-web-designer_install.ps1", + "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/google-web-designer_uninstall.ps1", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/graphviz.json b/ee/maintained-apps/inputs/winget/graphviz.json new file mode 100644 index 0000000000..76277d16d4 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/graphviz.json @@ -0,0 +1,14 @@ +{ + "name": "Graphviz", + "slug": "graphviz/windows", + "package_identifier": "Graphviz.Graphviz", + "unique_identifier": "Graphviz", + "installer_arch": "x64", + "installer_type": "exe", + "installer_scope": "machine", + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/graphviz_install.ps1", + "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/graphviz_uninstall.ps1", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/grepwin.json b/ee/maintained-apps/inputs/winget/grepwin.json new file mode 100644 index 0000000000..ec87ef5fff --- /dev/null +++ b/ee/maintained-apps/inputs/winget/grepwin.json @@ -0,0 +1,12 @@ +{ + "name": "grepWin", + "slug": "grepwin/windows", + "package_identifier": "StefansTools.grepWin", + "unique_identifier": "grepWin", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_install.ps1 new file mode 100644 index 0000000000..f207c944f1 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_install.ps1 @@ -0,0 +1,22 @@ +# Learn more about .exe install scripts: +# http://fleetdm.com/learn-more-about/exe-install-scripts +# +# Galaxy Modeler is an electron-builder (NSIS) installer; /S runs silent and +# /allusers forces the machine-wide install per the winget machine-scope switch. + +$exeFilePath = "${env:INSTALLER_PATH}" + +try { + +$process = Start-Process -FilePath "$exeFilePath" -ArgumentList "/S /allusers" -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Install exit code: $exitCode" + +# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated +if ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode + +} catch { + Write-Host "Error: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_uninstall.ps1 b/ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_uninstall.ps1 new file mode 100644 index 0000000000..6dfc19b9c9 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_uninstall.ps1 @@ -0,0 +1,56 @@ +# Uninstalls Galaxy Modeler. Locates the electron-builder NSIS uninstaller from +# the registry by DisplayName and runs it with /allusers /S after stopping the app. + +$softwareNameLike = "Galaxy Modeler*" + +$machineKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' +$machineKey32on64 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' + +$exitCode = $null + +try { + +foreach ($p in @("Galaxy Modeler")) { + Stop-Process -Name $p -Force -ErrorAction SilentlyContinue +} +Start-Sleep -Seconds 2 + +[array]$uninstallKeys = Get-ChildItem ` + -Path @($machineKey, $machineKey32on64) ` + -ErrorAction SilentlyContinue | + ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue } + +$selected = $uninstallKeys | + Where-Object { $_.DisplayName -like $softwareNameLike } | + Select-Object -First 1 +if (-not $selected -or -not $selected.UninstallString) { + Write-Host "Uninstall entry not found for $softwareNameLike" + Exit 1 +} + +$raw = if ($selected.QuietUninstallString) { $selected.QuietUninstallString } else { $selected.UninstallString } +if ($raw -match '^\s*"([^"]+)"\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} elseif ($raw -match '(?i)^\s*(.+?\.exe)\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} else { + $exe = $raw; $exeArgs = "" +} + +# electron-builder NSIS uninstaller: /allusers matches the machine install, /S is silent. +if ($exeArgs -notmatch '(?i)(^|\s)/allusers(\s|$)') { $exeArgs = "$exeArgs /allusers".Trim() } +if ($exeArgs -notmatch '(?i)(^|\s)/S(\s|$)') { $exeArgs = "$exeArgs /S".Trim() } + +Write-Host "Uninstall command: $exe" +Write-Host "Uninstall args: $exeArgs" +$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Uninstall exit code: $exitCode" + +} catch { + Write-Host "Error: $_" + Exit 1 +} + +if ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode diff --git a/ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_install.ps1 new file mode 100644 index 0000000000..0a3b1ac82a --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_install.ps1 @@ -0,0 +1,22 @@ +# Learn more about .exe install scripts: +# http://fleetdm.com/learn-more-about/exe-install-scripts +# +# Garmin BaseCamp is a WiX Burn bundle; /quiet /norestart runs it silently and +# installs machine-wide. + +$exeFilePath = "${env:INSTALLER_PATH}" + +try { + +$process = Start-Process -FilePath "$exeFilePath" -ArgumentList "/quiet /norestart" -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Install exit code: $exitCode" + +# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated +if ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode + +} catch { + Write-Host "Error: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_uninstall.ps1 b/ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_uninstall.ps1 new file mode 100644 index 0000000000..ffe94b097b --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_uninstall.ps1 @@ -0,0 +1,51 @@ +# Uninstalls Garmin BaseCamp (WiX Burn bundle). Runs the cached bundle's +# QuietUninstallString (/uninstall /quiet). + +$softwareNameLike = "Garmin BaseCamp*" + +$machineKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' +$machineKey32on64 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' + +$exitCode = $null + +try { + +[array]$uninstallKeys = Get-ChildItem ` + -Path @($machineKey, $machineKey32on64) ` + -ErrorAction SilentlyContinue | + ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue } + +$selected = $uninstallKeys | + Where-Object { $_.DisplayName -like $softwareNameLike } | + Select-Object -First 1 +if (-not $selected -or -not $selected.UninstallString) { + Write-Host "Uninstall entry not found for $softwareNameLike" + Exit 1 +} + +# WiX Burn: prefer QuietUninstallString; else force /uninstall /quiet onto the bundle exe. +$raw = if ($selected.QuietUninstallString) { $selected.QuietUninstallString } else { $selected.UninstallString } +if ($raw -match '^\s*"([^"]+)"\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} elseif ($raw -match '(?i)^\s*(.+?\.exe)\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} else { + $exe = $raw; $exeArgs = "" +} +if ($exeArgs -notmatch '(?i)(^|\s)/uninstall(\s|$)') { $exeArgs = "/uninstall $exeArgs".Trim() } +if ($exeArgs -notmatch '(?i)(^|\s)/quiet(\s|$)') { $exeArgs = "$exeArgs /quiet".Trim() } +if ($exeArgs -notmatch '(?i)/norestart') { $exeArgs = "$exeArgs /norestart".Trim() } + +Write-Host "Uninstall command: $exe" +Write-Host "Uninstall args: $exeArgs" +$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Uninstall exit code: $exitCode" + +} catch { + Write-Host "Error: $_" + Exit 1 +} + +if ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode diff --git a/ee/maintained-apps/inputs/winget/scripts/geogebra-classic_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/geogebra-classic_install.ps1 new file mode 100644 index 0000000000..778dd1391b --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/geogebra-classic_install.ps1 @@ -0,0 +1,24 @@ +# Learn more about install scripts: +# http://fleetdm.com/learn-more-about/install-scripts +# +# GeoGebra Classic's winget manifest declares Scope: user at the top level, but +# its WiX MSI installer is machine-wide (installs to Program Files (x86)). We run +# the MSI silently; ALLUSERS is set inside the package, so it lands per-machine. + +$logFile = "${env:TEMP}/fleet-install-software.log" + +try { + +$installProcess = Start-Process msiexec.exe ` + -ArgumentList "/quiet /norestart /lv ${logFile} /i `"${env:INSTALLER_PATH}`"" ` + -PassThru -Verb RunAs -Wait + +Get-Content $logFile -Tail 500 + +if ($installProcess.ExitCode -eq 3010 -or $installProcess.ExitCode -eq 1641) { Exit 0 } +Exit $installProcess.ExitCode + +} catch { + Write-Host "Error: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/scripts/geogebra-classic_uninstall.ps1 b/ee/maintained-apps/inputs/winget/scripts/geogebra-classic_uninstall.ps1 new file mode 100644 index 0000000000..887984b4a0 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/geogebra-classic_uninstall.ps1 @@ -0,0 +1,46 @@ +# Uninstalls GeoGebra Classic (machine-wide WiX MSI). Resolve the ProductCode +# from the registry by DisplayName and uninstall via msiexec. + +$softwareName = "GeoGebra Classic" + +$machineKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' +$machineKey32on64 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' +$successCodes = @(0, 3010, 1641) +$exitCode = $null + +try { + +[array]$uninstallKeys = Get-ChildItem ` + -Path @($machineKey, $machineKey32on64) ` + -ErrorAction SilentlyContinue | + ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue } + +$selected = $uninstallKeys | Where-Object { $_.DisplayName -eq $softwareName } | Select-Object -First 1 +if (-not $selected) { + Write-Host "Uninstall entry not found for '$softwareName'." + Exit 1 +} + +$productCode = $selected.PSChildName +if ($productCode -notmatch '^\{[0-9A-Fa-f-]+\}$') { + $raw = $selected.UninstallString + if ($raw -match '(\{[0-9A-Fa-f-]+\})') { $productCode = $matches[1] } +} +if ($productCode -notmatch '^\{[0-9A-Fa-f-]+\}$') { + Write-Host "Could not determine ProductCode for '$softwareName'." + Exit 1 +} + +Write-Host "Uninstalling product code: $productCode" +$process = Start-Process msiexec.exe ` + -ArgumentList "/x $productCode /qn /norestart" -NoNewWindow -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Uninstall exit code: $exitCode" + +} catch { + Write-Host "Error: $_" + Exit 1 +} + +if ($successCodes -contains $exitCode) { Exit 0 } +Exit $exitCode diff --git a/ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_install.ps1 new file mode 100644 index 0000000000..0c5a4e0317 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_install.ps1 @@ -0,0 +1,22 @@ +# Learn more about .exe install scripts: +# http://fleetdm.com/learn-more-about/exe-install-scripts +# +# GoAnywhere OpenPGP Studio ships as an install4j installer (bundled JRE). -q +# runs it unattended; suppressUnattendedReboot avoids an automatic reboot. + +$exeFilePath = "${env:INSTALLER_PATH}" + +try { + +$process = Start-Process -FilePath "$exeFilePath" ` + -ArgumentList "-q -Dinstall4j.suppressUnattendedReboot=true" -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Install exit code: $exitCode" + +if ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode + +} catch { + Write-Host "Error: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_uninstall.ps1 b/ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_uninstall.ps1 new file mode 100644 index 0000000000..69cb031ea8 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_uninstall.ps1 @@ -0,0 +1,54 @@ +# Uninstalls GoAnywhere OpenPGP Studio. install4j registers an ARP entry whose +# UninstallString points at its uninstall.exe; -q runs it unattended. + +$softwareNameLike = "GoAnywhere OpenPGP Studio*" + +$machineKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' +$machineKey32on64 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' + +$exitCode = $null + +try { + +foreach ($p in @("OpenPGPStudio", "GoAnywhere OpenPGP Studio")) { + Stop-Process -Name $p -Force -ErrorAction SilentlyContinue +} + +[array]$uninstallKeys = Get-ChildItem ` + -Path @($machineKey, $machineKey32on64) ` + -ErrorAction SilentlyContinue | + ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue } + +$selected = $uninstallKeys | + Where-Object { $_.DisplayName -like $softwareNameLike } | + Select-Object -First 1 +if (-not $selected -or -not $selected.UninstallString) { + Write-Host "Uninstall entry not found for $softwareNameLike" + Exit 1 +} + +$raw = $selected.UninstallString +if ($raw -match '^\s*"([^"]+)"\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} elseif ($raw -match '(?i)^\s*(.+?\.exe)\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} else { + $exe = $raw; $exeArgs = "" +} + +# install4j silent uninstall flag. +if ($exeArgs -notmatch '(?i)(^|\s)-q(\s|$)') { $exeArgs = "$exeArgs -q".Trim() } + +Write-Host "Uninstall command: $exe" +Write-Host "Uninstall args: $exeArgs" +$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Uninstall exit code: $exitCode" + +} catch { + Write-Host "Error: $_" + Exit 1 +} + +if ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode diff --git a/ee/maintained-apps/inputs/winget/scripts/goldendict-ng_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/goldendict-ng_install.ps1 new file mode 100644 index 0000000000..be8aad568c --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/goldendict-ng_install.ps1 @@ -0,0 +1,22 @@ +# Learn more about .exe install scripts: +# http://fleetdm.com/learn-more-about/exe-install-scripts +# +# GoldenDict-ng is a Nullsoft (NSIS) installer declaring machine scope; +# /S runs it silently and installs machine-wide to Program Files. + +$exeFilePath = "${env:INSTALLER_PATH}" + +try { + +$process = Start-Process -FilePath "$exeFilePath" -ArgumentList "/S" -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Install exit code: $exitCode" + +# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated +if ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode + +} catch { + Write-Host "Error: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/scripts/goldendict-ng_uninstall.ps1 b/ee/maintained-apps/inputs/winget/scripts/goldendict-ng_uninstall.ps1 new file mode 100644 index 0000000000..bb4a54d7fa --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/goldendict-ng_uninstall.ps1 @@ -0,0 +1,57 @@ +# Uninstalls GoldenDict-ng. Locates the NSIS uninstaller from the registry by +# DisplayName and runs it silently with /S. Stop the app first so files unlock. + +$softwareNameLike = "GoldenDict-ng*" + +$machineKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' +$machineKey32on64 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' + +$exitCode = $null + +try { + +foreach ($p in @("GoldenDict")) { + Stop-Process -Name $p -Force -ErrorAction SilentlyContinue +} +Start-Sleep -Seconds 2 + +[array]$uninstallKeys = Get-ChildItem ` + -Path @($machineKey, $machineKey32on64) ` + -ErrorAction SilentlyContinue | + ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue } + +$selected = $uninstallKeys | + Where-Object { $_.DisplayName -like $softwareNameLike } | + Select-Object -First 1 +if (-not $selected -or -not $selected.UninstallString) { + Write-Host "Uninstall entry not found for $softwareNameLike" + Exit 1 +} + +$raw = if ($selected.QuietUninstallString) { $selected.QuietUninstallString } else { $selected.UninstallString } + +# Parse exe + args (quoted / unquoted / bare). +if ($raw -match '^\s*"([^"]+)"\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} elseif ($raw -match '(?i)^\s*(.+?\.exe)\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} else { + $exe = $raw; $exeArgs = "" +} + +# NSIS uninstallers require /S for a silent uninstall. +if ($exeArgs -notmatch '(?i)(^|\s)/S(\s|$)') { $exeArgs = "$exeArgs /S".Trim() } + +Write-Host "Uninstall command: $exe" +Write-Host "Uninstall args: $exeArgs" +$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Uninstall exit code: $exitCode" + +} catch { + Write-Host "Error: $_" + Exit 1 +} + +if ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode diff --git a/ee/maintained-apps/inputs/winget/scripts/google-ads-editor_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/google-ads-editor_install.ps1 new file mode 100644 index 0000000000..cee126ba7d --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/google-ads-editor_install.ps1 @@ -0,0 +1,28 @@ +# Learn more about install scripts: +# http://fleetdm.com/learn-more-about/install-scripts +# +# The Google Ads Editor MSI ships as both a per-user and a per-machine package +# (same binary; the machine variant sets ALLUSERS=1). A plain silent install +# under Fleet's SYSTEM context can land per-user (in the SYSTEM profile), so we +# force a true per-machine install by passing ALLUSERS=1 explicitly. + +$logFile = "${env:TEMP}/fleet-install-software.log" + +try { + +$installProcess = Start-Process msiexec.exe ` + -ArgumentList "/quiet /norestart /lv ${logFile} ALLUSERS=1 /i `"${env:INSTALLER_PATH}`"" ` + -PassThru -Verb RunAs -Wait + +Get-Content $logFile -Tail 500 + +# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated +if ($installProcess.ExitCode -eq 3010 -or $installProcess.ExitCode -eq 1641) { + Exit 0 +} +Exit $installProcess.ExitCode + +} catch { + Write-Host "Error: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/scripts/google-web-designer_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/google-web-designer_install.ps1 new file mode 100644 index 0000000000..15b4e1aa68 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/google-web-designer_install.ps1 @@ -0,0 +1,22 @@ +# Learn more about .exe install scripts: +# http://fleetdm.com/learn-more-about/exe-install-scripts +# +# Google Web Designer is a Nullsoft (NSIS) installer declaring machine scope; +# /S runs it silently and installs machine-wide to Program Files. + +$exeFilePath = "${env:INSTALLER_PATH}" + +try { + +$process = Start-Process -FilePath "$exeFilePath" -ArgumentList "/S" -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Install exit code: $exitCode" + +# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated +if ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode + +} catch { + Write-Host "Error: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/scripts/google-web-designer_uninstall.ps1 b/ee/maintained-apps/inputs/winget/scripts/google-web-designer_uninstall.ps1 new file mode 100644 index 0000000000..0f6051c07a --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/google-web-designer_uninstall.ps1 @@ -0,0 +1,52 @@ +# Uninstalls Google Web Designer. Locates the NSIS uninstaller from the registry +# by DisplayName and runs it silently with /S. + +$softwareNameLike = "Google Web Designer*" + +$machineKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' +$machineKey32on64 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' + +$exitCode = $null + +try { + +[array]$uninstallKeys = Get-ChildItem ` + -Path @($machineKey, $machineKey32on64) ` + -ErrorAction SilentlyContinue | + ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue } + +$selected = $uninstallKeys | + Where-Object { $_.DisplayName -like $softwareNameLike } | + Select-Object -First 1 +if (-not $selected -or -not $selected.UninstallString) { + Write-Host "Uninstall entry not found for $softwareNameLike" + Exit 1 +} + +$raw = if ($selected.QuietUninstallString) { $selected.QuietUninstallString } else { $selected.UninstallString } + +# Parse exe + args (quoted / unquoted / bare). +if ($raw -match '^\s*"([^"]+)"\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} elseif ($raw -match '(?i)^\s*(.+?\.exe)\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} else { + $exe = $raw; $exeArgs = "" +} + +# NSIS uninstallers require /S for a silent uninstall. +if ($exeArgs -notmatch '(?i)(^|\s)/S(\s|$)') { $exeArgs = "$exeArgs /S".Trim() } + +Write-Host "Uninstall command: $exe" +Write-Host "Uninstall args: $exeArgs" +$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Uninstall exit code: $exitCode" + +} catch { + Write-Host "Error: $_" + Exit 1 +} + +if ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode diff --git a/ee/maintained-apps/inputs/winget/scripts/graphviz_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/graphviz_install.ps1 new file mode 100644 index 0000000000..12fbd4d43a --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/graphviz_install.ps1 @@ -0,0 +1,22 @@ +# Learn more about .exe install scripts: +# http://fleetdm.com/learn-more-about/exe-install-scripts +# +# Graphviz is a Nullsoft (NSIS) installer declaring machine scope; /S runs it +# silently and installs machine-wide to Program Files. + +$exeFilePath = "${env:INSTALLER_PATH}" + +try { + +$process = Start-Process -FilePath "$exeFilePath" -ArgumentList "/S" -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Install exit code: $exitCode" + +# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated +if ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode + +} catch { + Write-Host "Error: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/scripts/graphviz_uninstall.ps1 b/ee/maintained-apps/inputs/winget/scripts/graphviz_uninstall.ps1 new file mode 100644 index 0000000000..7a5ac51180 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/graphviz_uninstall.ps1 @@ -0,0 +1,52 @@ +# Uninstalls Graphviz. Locates the NSIS uninstaller from the registry by +# DisplayName and runs it silently with /S. + +$softwareNameLike = "Graphviz*" + +$machineKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' +$machineKey32on64 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' + +$exitCode = $null + +try { + +[array]$uninstallKeys = Get-ChildItem ` + -Path @($machineKey, $machineKey32on64) ` + -ErrorAction SilentlyContinue | + ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue } + +$selected = $uninstallKeys | + Where-Object { $_.DisplayName -like $softwareNameLike } | + Select-Object -First 1 +if (-not $selected -or -not $selected.UninstallString) { + Write-Host "Uninstall entry not found for $softwareNameLike" + Exit 1 +} + +$raw = if ($selected.QuietUninstallString) { $selected.QuietUninstallString } else { $selected.UninstallString } + +# Parse exe + args (quoted / unquoted / bare). +if ($raw -match '^\s*"([^"]+)"\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} elseif ($raw -match '(?i)^\s*(.+?\.exe)\s*(.*)$') { + $exe = $matches[1]; $exeArgs = $matches[2].Trim() +} else { + $exe = $raw; $exeArgs = "" +} + +# NSIS uninstallers require /S for a silent uninstall. +if ($exeArgs -notmatch '(?i)(^|\s)/S(\s|$)') { $exeArgs = "$exeArgs /S".Trim() } + +Write-Host "Uninstall command: $exe" +Write-Host "Uninstall args: $exeArgs" +$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait +$exitCode = $process.ExitCode +Write-Host "Uninstall exit code: $exitCode" + +} catch { + Write-Host "Error: $_" + Exit 1 +} + +if ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 } +Exit $exitCode diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 279c24da0d..5f415908f3 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -3473,6 +3473,41 @@ "unique_identifier": "com.nektony.Funter-SIII", "description": "Funter is a shows hidden files and folders and switches their visibility in Finder." }, + { + "name": "Gadwin PrintScreen Pro", + "slug": "gadwin-printscreen-pro/windows", + "platform": "windows", + "unique_identifier": "Gadwin PrintScreenPro (64-Bit)", + "description": "Gadwin PrintScreen Pro is a screen capture tool for saving, printing, and sharing screenshots." + }, + { + "name": "Gadwin PrintScreen", + "slug": "gadwin-printscreen/windows", + "platform": "windows", + "unique_identifier": "Gadwin PrintScreen (64-Bit)", + "description": "Gadwin PrintScreen is a screen capture tool that saves screenshots in multiple graphics formats." + }, + { + "name": "Gadwin ScreenRecorder", + "slug": "gadwin-screenrecorder/windows", + "platform": "windows", + "unique_identifier": "Gadwin ScreenRecorder (64-Bit)", + "description": "Gadwin ScreenRecorder is a screen recording tool for creating videos of on-screen activity." + }, + { + "name": "Galaxy Modeler", + "slug": "galaxy-modeler/windows", + "platform": "windows", + "unique_identifier": "Galaxy Modeler", + "description": "Galaxy Modeler is a visual schema design tool for GraphQL data modeling." + }, + { + "name": "Garmin BaseCamp", + "slug": "garmin-basecamp/windows", + "platform": "windows", + "unique_identifier": "Garmin BaseCamp", + "description": "Garmin BaseCamp is a trip-planning application for organizing maps, routes, and outdoor activities." + }, { "name": "Garmin Express", "slug": "garmin-express/darwin", @@ -3543,6 +3578,13 @@ "unique_identifier": "GenesysCloud", "description": "Genesys Cloud is a desktop app for running the Genesys Cloud contact center platform as a stand-alone program, separate from the web browser." }, + { + "name": "GeoGebra Classic", + "slug": "geogebra-classic/windows", + "platform": "windows", + "unique_identifier": "GeoGebra Classic", + "description": "GeoGebra Classic is a math tool bundle for geometry, algebra, spreadsheets, and calculus." + }, { "name": "Gephi", "slug": "gephi/darwin", @@ -3648,6 +3690,13 @@ "unique_identifier": "com.GeorgSeifert.Glyphs3", "description": "Glyphs is a font editor." }, + { + "name": "Go", + "slug": "go/windows", + "platform": "windows", + "unique_identifier": "Go Programming Language", + "description": "Go is an open-source programming language for building secure, scalable systems." + }, { "name": "Go2Shell", "slug": "go2shell/darwin", @@ -3655,6 +3704,13 @@ "unique_identifier": "com.zipzapmac.Go2Shell", "description": "Go2Shell is an opens a terminal window to the current directory in Finder." }, + { + "name": "GoAnywhere OpenPGP Studio", + "slug": "goanywhere-openpgp-studio/windows", + "platform": "windows", + "unique_identifier": "GoAnywhere OpenPGP Studio", + "description": "GoAnywhere OpenPGP Studio is a free PGP encryption tool for securing files." + }, { "name": "Godot Engine", "slug": "godot/darwin", @@ -3697,6 +3753,13 @@ "unique_identifier": "GoLand", "description": "GoLand is a Go (golang) IDE by JetBrains" }, + { + "name": "GoldenDict-ng", + "slug": "goldendict-ng/windows", + "platform": "windows", + "unique_identifier": "GoldenDict-ng", + "description": "GoldenDict-ng is an open-source dictionary lookup program supporting multiple dictionary formats." + }, { "name": "GoodSync", "slug": "goodsync/darwin", @@ -3704,6 +3767,13 @@ "unique_identifier": "com.sibersystems.goodsyncmac2000", "description": "GoodSync is a file synchronisation and backup software." }, + { + "name": "Google Ads Editor", + "slug": "google-ads-editor/windows", + "platform": "windows", + "unique_identifier": "Google Ads Editor", + "description": "Google Ads Editor is a free application for managing Google Ads campaigns." + }, { "name": "Google Chrome", "slug": "google-chrome/darwin", @@ -3753,6 +3823,13 @@ "unique_identifier": "com.google.GeminiMacOS", "description": "Google Gemini is a native desktop AI assistant from Google." }, + { + "name": "Google Web Designer", + "slug": "google-web-designer/windows", + "platform": "windows", + "unique_identifier": "Google Web Designer", + "description": "Google Web Designer is a tool for creating HTML5-based ads, videos, and interactive designs." + }, { "name": "GoToMeeting", "slug": "gotomeeting/darwin", @@ -3816,6 +3893,20 @@ "unique_identifier": "Granola", "description": "Granola is an AI-powered notepad for meetings." }, + { + "name": "Graphviz", + "slug": "graphviz/windows", + "platform": "windows", + "unique_identifier": "Graphviz", + "description": "Graphviz is open-source graph visualization software for representing structural information as diagrams." + }, + { + "name": "grepWin", + "slug": "grepwin/windows", + "platform": "windows", + "unique_identifier": "grepWin", + "description": "grepWin is a regular expression search-and-replace tool for Windows." + }, { "name": "Grids", "slug": "grids/darwin", diff --git a/ee/maintained-apps/outputs/gadwin-printscreen-pro/windows.json b/ee/maintained-apps/outputs/gadwin-printscreen-pro/windows.json new file mode 100644 index 0000000000..0b36a72013 --- /dev/null +++ b/ee/maintained-apps/outputs/gadwin-printscreen-pro/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "6.5.0.0", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Gadwin PrintScreenPro (64-Bit)' AND publisher = 'Gadwin, Ltd.';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Gadwin PrintScreenPro (64-Bit)' AND publisher = 'Gadwin, Ltd.' AND version_compare(version, '6.5.0.0') < 0);" + }, + "installer_url": "https://www.gadwin.com/download/PrintScreenPro650_Win64.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "9290bdad", + "sha256": "4affdc0955cf0c7d84f4916304d7faf2f0f4240ad13cecef1364b470dfc73ca6", + "default_categories": [ + "Productivity" + ], + "upgrade_code": "{482A9C7A-6CB8-4B90-AABC-06AF4A94327D}" + } + ], + "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", + "9290bdad": "# 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('{482A9C7A-6CB8-4B90-AABC-06AF4A94327D}')) {\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" + } +} diff --git a/ee/maintained-apps/outputs/gadwin-printscreen/windows.json b/ee/maintained-apps/outputs/gadwin-printscreen/windows.json new file mode 100644 index 0000000000..13aa1b12c8 --- /dev/null +++ b/ee/maintained-apps/outputs/gadwin-printscreen/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "6.5.0.0", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Gadwin PrintScreen (64-Bit)' AND publisher = 'Gadwin, Ltd.';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Gadwin PrintScreen (64-Bit)' AND publisher = 'Gadwin, Ltd.' AND version_compare(version, '6.5.0.0') < 0);" + }, + "installer_url": "https://www.gadwin.com/download/PrintScreen650_Win64.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "faa268fb", + "sha256": "46315da911ecc82191d77bf2686e24ec0b02a6846f5e046e62f5642431eaf1a1", + "default_categories": [ + "Productivity" + ], + "upgrade_code": "{56218125-6D61-40D5-922A-F2651C8988AC}" + } + ], + "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", + "faa268fb": "# 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('{56218125-6D61-40D5-922A-F2651C8988AC}')) {\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" + } +} diff --git a/ee/maintained-apps/outputs/gadwin-screenrecorder/windows.json b/ee/maintained-apps/outputs/gadwin-screenrecorder/windows.json new file mode 100644 index 0000000000..c1c1cdeaf3 --- /dev/null +++ b/ee/maintained-apps/outputs/gadwin-screenrecorder/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "4.5.0.0", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Gadwin ScreenRecorder (64-Bit)' AND publisher = 'Gadwin, Ltd.';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Gadwin ScreenRecorder (64-Bit)' AND publisher = 'Gadwin, Ltd.' AND version_compare(version, '4.5.0.0') < 0);" + }, + "installer_url": "https://www.gadwin.com/download/ScreenRecorder450_Win64.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "38f42353", + "sha256": "2119b9f8c7d2353662ae5141d51eb8581ac308a6964a101a3e83a03156962efd", + "default_categories": [ + "Productivity" + ], + "upgrade_code": "{FD892A1E-972D-428C-BF97-5494CD7795C5}" + } + ], + "refs": { + "38f42353": "# 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('{FD892A1E-972D-428C-BF97-5494CD7795C5}')) {\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" + } +} diff --git a/ee/maintained-apps/outputs/galaxy-modeler/windows.json b/ee/maintained-apps/outputs/galaxy-modeler/windows.json new file mode 100644 index 0000000000..364a931ed8 --- /dev/null +++ b/ee/maintained-apps/outputs/galaxy-modeler/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "12.6.2", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Galaxy Modeler' AND publisher = 'Ideamerit';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Galaxy Modeler' AND publisher = 'Ideamerit' AND version_compare(version, '12.6.2') < 0);" + }, + "installer_url": "https://www.datensen.com/downloads/Galaxy%20Modeler-12.6.2-x64.exe", + "install_script_ref": "44443700", + "uninstall_script_ref": "5719b9f7", + "sha256": "c82fc58b557d629c46206f898f23aa103aac5cb08831d8aa17e4a3728bb917a6", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "44443700": "# Learn more about .exe install scripts:\n# http://fleetdm.com/learn-more-about/exe-install-scripts\n#\n# Galaxy Modeler is an electron-builder (NSIS) installer; /S runs silent and\n# /allusers forces the machine-wide install per the winget machine-scope switch.\n\n$exeFilePath = \"${env:INSTALLER_PATH}\"\n\ntry {\n\n$process = Start-Process -FilePath \"$exeFilePath\" -ArgumentList \"/S /allusers\" -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Install exit code: $exitCode\"\n\n# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated\nif ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n", + "5719b9f7": "# Uninstalls Galaxy Modeler. Locates the electron-builder NSIS uninstaller from\n# the registry by DisplayName and runs it with /allusers /S after stopping the app.\n\n$softwareNameLike = \"Galaxy Modeler*\"\n\n$machineKey = 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n$machineKey32on64 = 'HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n\n$exitCode = $null\n\ntry {\n\nforeach ($p in @(\"Galaxy Modeler\")) {\n Stop-Process -Name $p -Force -ErrorAction SilentlyContinue\n}\nStart-Sleep -Seconds 2\n\n[array]$uninstallKeys = Get-ChildItem `\n -Path @($machineKey, $machineKey32on64) `\n -ErrorAction SilentlyContinue |\n ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue }\n\n$selected = $uninstallKeys |\n Where-Object { $_.DisplayName -like $softwareNameLike } |\n Select-Object -First 1\nif (-not $selected -or -not $selected.UninstallString) {\n Write-Host \"Uninstall entry not found for $softwareNameLike\"\n Exit 1\n}\n\n$raw = if ($selected.QuietUninstallString) { $selected.QuietUninstallString } else { $selected.UninstallString }\nif ($raw -match '^\\s*\"([^\"]+)\"\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} elseif ($raw -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} else {\n $exe = $raw; $exeArgs = \"\"\n}\n\n# electron-builder NSIS uninstaller: /allusers matches the machine install, /S is silent.\nif ($exeArgs -notmatch '(?i)(^|\\s)/allusers(\\s|$)') { $exeArgs = \"$exeArgs /allusers\".Trim() }\nif ($exeArgs -notmatch '(?i)(^|\\s)/S(\\s|$)') { $exeArgs = \"$exeArgs /S\".Trim() }\n\nWrite-Host \"Uninstall command: $exe\"\nWrite-Host \"Uninstall args: $exeArgs\"\n$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Uninstall exit code: $exitCode\"\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n\nif ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n" + } +} diff --git a/ee/maintained-apps/outputs/garmin-basecamp/windows.json b/ee/maintained-apps/outputs/garmin-basecamp/windows.json new file mode 100644 index 0000000000..2c8851dd42 --- /dev/null +++ b/ee/maintained-apps/outputs/garmin-basecamp/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "4.7.5.0", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Garmin BaseCamp' AND publisher = 'Garmin Ltd. or its subsidiaries';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Garmin BaseCamp' AND publisher = 'Garmin Ltd. or its subsidiaries' AND version_compare(version, '4.7.5.0') < 0);" + }, + "installer_url": "https://download.garmin.com/software/BaseCamp_475.exe", + "install_script_ref": "df742bcc", + "uninstall_script_ref": "71f96656", + "sha256": "12c753fc067acb51b4a28cb01946edfb6a2545e8865fa2a346689526aeba30ca", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "71f96656": "# Uninstalls Garmin BaseCamp (WiX Burn bundle). Runs the cached bundle's\n# QuietUninstallString (/uninstall /quiet).\n\n$softwareNameLike = \"Garmin BaseCamp*\"\n\n$machineKey = 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n$machineKey32on64 = 'HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n\n$exitCode = $null\n\ntry {\n\n[array]$uninstallKeys = Get-ChildItem `\n -Path @($machineKey, $machineKey32on64) `\n -ErrorAction SilentlyContinue |\n ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue }\n\n$selected = $uninstallKeys |\n Where-Object { $_.DisplayName -like $softwareNameLike } |\n Select-Object -First 1\nif (-not $selected -or -not $selected.UninstallString) {\n Write-Host \"Uninstall entry not found for $softwareNameLike\"\n Exit 1\n}\n\n# WiX Burn: prefer QuietUninstallString; else force /uninstall /quiet onto the bundle exe.\n$raw = if ($selected.QuietUninstallString) { $selected.QuietUninstallString } else { $selected.UninstallString }\nif ($raw -match '^\\s*\"([^\"]+)\"\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} elseif ($raw -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} else {\n $exe = $raw; $exeArgs = \"\"\n}\nif ($exeArgs -notmatch '(?i)(^|\\s)/uninstall(\\s|$)') { $exeArgs = \"/uninstall $exeArgs\".Trim() }\nif ($exeArgs -notmatch '(?i)(^|\\s)/quiet(\\s|$)') { $exeArgs = \"$exeArgs /quiet\".Trim() }\nif ($exeArgs -notmatch '(?i)/norestart') { $exeArgs = \"$exeArgs /norestart\".Trim() }\n\nWrite-Host \"Uninstall command: $exe\"\nWrite-Host \"Uninstall args: $exeArgs\"\n$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Uninstall exit code: $exitCode\"\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n\nif ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n", + "df742bcc": "# Learn more about .exe install scripts:\n# http://fleetdm.com/learn-more-about/exe-install-scripts\n#\n# Garmin BaseCamp is a WiX Burn bundle; /quiet /norestart runs it silently and\n# installs machine-wide.\n\n$exeFilePath = \"${env:INSTALLER_PATH}\"\n\ntry {\n\n$process = Start-Process -FilePath \"$exeFilePath\" -ArgumentList \"/quiet /norestart\" -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Install exit code: $exitCode\"\n\n# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated\nif ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n" + } +} diff --git a/ee/maintained-apps/outputs/geogebra-classic/windows.json b/ee/maintained-apps/outputs/geogebra-classic/windows.json new file mode 100644 index 0000000000..54dadbffd7 --- /dev/null +++ b/ee/maintained-apps/outputs/geogebra-classic/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "6.0.920", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'GeoGebra Classic' AND publisher = 'International GeoGebra Institute';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'GeoGebra Classic' AND publisher = 'International GeoGebra Institute' AND version_compare(version, '6.0.920') < 0);" + }, + "installer_url": "https://download.geogebra.org/installers/6.0/GeoGebra-Windows-Installer-6-0-920-0.msi", + "install_script_ref": "ebe19da8", + "uninstall_script_ref": "2d02bc56", + "sha256": "65a63d49cc15d64a459338d622c4dde34a2b811ec5dddefe9e4e9c3f7d830ae7", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2d02bc56": "# Uninstalls GeoGebra Classic (machine-wide WiX MSI). Resolve the ProductCode\n# from the registry by DisplayName and uninstall via msiexec.\n\n$softwareName = \"GeoGebra Classic\"\n\n$machineKey = 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n$machineKey32on64 = 'HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n$successCodes = @(0, 3010, 1641)\n$exitCode = $null\n\ntry {\n\n[array]$uninstallKeys = Get-ChildItem `\n -Path @($machineKey, $machineKey32on64) `\n -ErrorAction SilentlyContinue |\n ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue }\n\n$selected = $uninstallKeys | Where-Object { $_.DisplayName -eq $softwareName } | Select-Object -First 1\nif (-not $selected) {\n Write-Host \"Uninstall entry not found for '$softwareName'.\"\n Exit 1\n}\n\n$productCode = $selected.PSChildName\nif ($productCode -notmatch '^\\{[0-9A-Fa-f-]+\\}$') {\n $raw = $selected.UninstallString\n if ($raw -match '(\\{[0-9A-Fa-f-]+\\})') { $productCode = $matches[1] }\n}\nif ($productCode -notmatch '^\\{[0-9A-Fa-f-]+\\}$') {\n Write-Host \"Could not determine ProductCode for '$softwareName'.\"\n Exit 1\n}\n\nWrite-Host \"Uninstalling product code: $productCode\"\n$process = Start-Process msiexec.exe `\n -ArgumentList \"/x $productCode /qn /norestart\" -NoNewWindow -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Uninstall exit code: $exitCode\"\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n\nif ($successCodes -contains $exitCode) { Exit 0 }\nExit $exitCode\n", + "ebe19da8": "# Learn more about install scripts:\n# http://fleetdm.com/learn-more-about/install-scripts\n#\n# GeoGebra Classic's winget manifest declares Scope: user at the top level, but\n# its WiX MSI installer is machine-wide (installs to Program Files (x86)). We run\n# the MSI silently; ALLUSERS is set inside the package, so it lands per-machine.\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}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nif ($installProcess.ExitCode -eq 3010 -or $installProcess.ExitCode -eq 1641) { Exit 0 }\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n" + } +} diff --git a/ee/maintained-apps/outputs/go/windows.json b/ee/maintained-apps/outputs/go/windows.json new file mode 100644 index 0000000000..2111db626d --- /dev/null +++ b/ee/maintained-apps/outputs/go/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "1.26.5", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'Go Programming Language%' AND publisher = 'https://go.dev';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Go Programming Language%' AND publisher = 'https://go.dev' AND version_compare(version, '1.26.5') < 0);" + }, + "installer_url": "https://go.dev/dl/go1.26.5.windows-amd64.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "0047620c", + "sha256": "d554dc209403b101225fc2b54647ef47df09bea23291b1246fe1b35198f55f50", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{22EA7650-4AC6-4001-BF29-F4B8775DB1C0}" + } + ], + "refs": { + "0047620c": "# 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('{22EA7650-4AC6-4001-BF29-F4B8775DB1C0}')) {\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" + } +} diff --git a/ee/maintained-apps/outputs/goanywhere-openpgp-studio/windows.json b/ee/maintained-apps/outputs/goanywhere-openpgp-studio/windows.json new file mode 100644 index 0000000000..5ed291bc6d --- /dev/null +++ b/ee/maintained-apps/outputs/goanywhere-openpgp-studio/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.2.3", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'GoAnywhere OpenPGP Studio' AND publisher = 'Fortra';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'GoAnywhere OpenPGP Studio' AND publisher = 'Fortra' AND version_compare(version, '1.2.3') < 0);" + }, + "installer_url": "https://static.goanywhere.com/releases/goanywhere/openpgpstudio/gapgpstudio1_2_3_windows-x64.exe", + "install_script_ref": "d871f28a", + "uninstall_script_ref": "b0caf715", + "sha256": "8c50532e3ba8f8fcf2333787741c132be6dc36ab97f50f04d35764a197bf0d5d", + "default_categories": [ + "Security" + ] + } + ], + "refs": { + "b0caf715": "# Uninstalls GoAnywhere OpenPGP Studio. install4j registers an ARP entry whose\n# UninstallString points at its uninstall.exe; -q runs it unattended.\n\n$softwareNameLike = \"GoAnywhere OpenPGP Studio*\"\n\n$machineKey = 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n$machineKey32on64 = 'HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n\n$exitCode = $null\n\ntry {\n\nforeach ($p in @(\"OpenPGPStudio\", \"GoAnywhere OpenPGP Studio\")) {\n Stop-Process -Name $p -Force -ErrorAction SilentlyContinue\n}\n\n[array]$uninstallKeys = Get-ChildItem `\n -Path @($machineKey, $machineKey32on64) `\n -ErrorAction SilentlyContinue |\n ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue }\n\n$selected = $uninstallKeys |\n Where-Object { $_.DisplayName -like $softwareNameLike } |\n Select-Object -First 1\nif (-not $selected -or -not $selected.UninstallString) {\n Write-Host \"Uninstall entry not found for $softwareNameLike\"\n Exit 1\n}\n\n$raw = $selected.UninstallString\nif ($raw -match '^\\s*\"([^\"]+)\"\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} elseif ($raw -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} else {\n $exe = $raw; $exeArgs = \"\"\n}\n\n# install4j silent uninstall flag.\nif ($exeArgs -notmatch '(?i)(^|\\s)-q(\\s|$)') { $exeArgs = \"$exeArgs -q\".Trim() }\n\nWrite-Host \"Uninstall command: $exe\"\nWrite-Host \"Uninstall args: $exeArgs\"\n$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Uninstall exit code: $exitCode\"\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n\nif ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n", + "d871f28a": "# Learn more about .exe install scripts:\n# http://fleetdm.com/learn-more-about/exe-install-scripts\n#\n# GoAnywhere OpenPGP Studio ships as an install4j installer (bundled JRE). -q\n# runs it unattended; suppressUnattendedReboot avoids an automatic reboot.\n\n$exeFilePath = \"${env:INSTALLER_PATH}\"\n\ntry {\n\n$process = Start-Process -FilePath \"$exeFilePath\" `\n -ArgumentList \"-q -Dinstall4j.suppressUnattendedReboot=true\" -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Install exit code: $exitCode\"\n\nif ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n" + } +} diff --git a/ee/maintained-apps/outputs/goldendict-ng/windows.json b/ee/maintained-apps/outputs/goldendict-ng/windows.json new file mode 100644 index 0000000000..06b2b35e41 --- /dev/null +++ b/ee/maintained-apps/outputs/goldendict-ng/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "26.6.2", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'GoldenDict-ng';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'GoldenDict-ng' AND version_compare(version, '26.6.2') < 0);" + }, + "installer_url": "https://github.com/xiaoyifang/goldendict-ng/releases/download/v26.6.2/GoldenDict-ng-26.6.2-Qt6.8.3-Windows-installer.exe", + "install_script_ref": "cfd3838e", + "uninstall_script_ref": "ae5457ec", + "sha256": "8225752610bc6f3669c5a07df6f14ce05a538ed3a97ee789c06efd4ff17f09e2", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "ae5457ec": "# Uninstalls GoldenDict-ng. Locates the NSIS uninstaller from the registry by\n# DisplayName and runs it silently with /S. Stop the app first so files unlock.\n\n$softwareNameLike = \"GoldenDict-ng*\"\n\n$machineKey = 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n$machineKey32on64 = 'HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n\n$exitCode = $null\n\ntry {\n\nforeach ($p in @(\"GoldenDict\")) {\n Stop-Process -Name $p -Force -ErrorAction SilentlyContinue\n}\nStart-Sleep -Seconds 2\n\n[array]$uninstallKeys = Get-ChildItem `\n -Path @($machineKey, $machineKey32on64) `\n -ErrorAction SilentlyContinue |\n ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue }\n\n$selected = $uninstallKeys |\n Where-Object { $_.DisplayName -like $softwareNameLike } |\n Select-Object -First 1\nif (-not $selected -or -not $selected.UninstallString) {\n Write-Host \"Uninstall entry not found for $softwareNameLike\"\n Exit 1\n}\n\n$raw = if ($selected.QuietUninstallString) { $selected.QuietUninstallString } else { $selected.UninstallString }\n\n# Parse exe + args (quoted / unquoted / bare).\nif ($raw -match '^\\s*\"([^\"]+)\"\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} elseif ($raw -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} else {\n $exe = $raw; $exeArgs = \"\"\n}\n\n# NSIS uninstallers require /S for a silent uninstall.\nif ($exeArgs -notmatch '(?i)(^|\\s)/S(\\s|$)') { $exeArgs = \"$exeArgs /S\".Trim() }\n\nWrite-Host \"Uninstall command: $exe\"\nWrite-Host \"Uninstall args: $exeArgs\"\n$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Uninstall exit code: $exitCode\"\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n\nif ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n", + "cfd3838e": "# Learn more about .exe install scripts:\n# http://fleetdm.com/learn-more-about/exe-install-scripts\n#\n# GoldenDict-ng is a Nullsoft (NSIS) installer declaring machine scope;\n# /S runs it silently and installs machine-wide to Program Files.\n\n$exeFilePath = \"${env:INSTALLER_PATH}\"\n\ntry {\n\n$process = Start-Process -FilePath \"$exeFilePath\" -ArgumentList \"/S\" -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Install exit code: $exitCode\"\n\n# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated\nif ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n" + } +} diff --git a/ee/maintained-apps/outputs/google-ads-editor/windows.json b/ee/maintained-apps/outputs/google-ads-editor/windows.json new file mode 100644 index 0000000000..17cf75c137 --- /dev/null +++ b/ee/maintained-apps/outputs/google-ads-editor/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "14.12.6.0", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Google Ads Editor' AND publisher = 'Google';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Google Ads Editor' AND publisher = 'Google' AND version_compare(version, '14.12.6.0') < 0);" + }, + "installer_url": "https://dl.google.com/release2/misc/ccmy7b6t6gzbw2miz232rfkch4_14.12.6.0/google_ads_editor.msi", + "install_script_ref": "bdccfcda", + "uninstall_script_ref": "36567b20", + "sha256": "ad7b17f20fc0e1696e92f9b165ec66e41b45adc202324770ad7ba1c280329a9f", + "default_categories": [ + "Productivity" + ], + "upgrade_code": "{2C881436-87C2-4224-B264-38277EB91B37}" + } + ], + "refs": { + "36567b20": "# 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('{2C881436-87C2-4224-B264-38277EB91B37}')) {\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", + "bdccfcda": "# Learn more about install scripts:\n# http://fleetdm.com/learn-more-about/install-scripts\n#\n# The Google Ads Editor MSI ships as both a per-user and a per-machine package\n# (same binary; the machine variant sets ALLUSERS=1). A plain silent install\n# under Fleet's SYSTEM context can land per-user (in the SYSTEM profile), so we\n# force a true per-machine install by passing ALLUSERS=1 explicitly.\n\n$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv ${logFile} ALLUSERS=1 /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\n# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated\nif ($installProcess.ExitCode -eq 3010 -or $installProcess.ExitCode -eq 1641) {\n Exit 0\n}\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n" + } +} diff --git a/ee/maintained-apps/outputs/google-web-designer/windows.json b/ee/maintained-apps/outputs/google-web-designer/windows.json new file mode 100644 index 0000000000..6bc433200c --- /dev/null +++ b/ee/maintained-apps/outputs/google-web-designer/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "14.3.0.0", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Google Web Designer' AND publisher = 'Google LLC.';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Google Web Designer' AND publisher = 'Google LLC.' AND version_compare(version, '14.3.0.0') < 0);" + }, + "installer_url": "https://dl.google.com/release2/Webdesigner/acky5xyddb2r44okdi2iwoujpiwa_14.3.0.0/googlewebdesigner_win_x64_14.3.0.0.exe", + "install_script_ref": "a7d586ca", + "uninstall_script_ref": "ecb2fc92", + "sha256": "0bd982d5af4ba0cf4178dfbf25730ae27bd79b597a6096498b66563eae338faf", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "a7d586ca": "# Learn more about .exe install scripts:\n# http://fleetdm.com/learn-more-about/exe-install-scripts\n#\n# Google Web Designer is a Nullsoft (NSIS) installer declaring machine scope;\n# /S runs it silently and installs machine-wide to Program Files.\n\n$exeFilePath = \"${env:INSTALLER_PATH}\"\n\ntry {\n\n$process = Start-Process -FilePath \"$exeFilePath\" -ArgumentList \"/S\" -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Install exit code: $exitCode\"\n\n# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated\nif ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n", + "ecb2fc92": "# Uninstalls Google Web Designer. Locates the NSIS uninstaller from the registry\n# by DisplayName and runs it silently with /S.\n\n$softwareNameLike = \"Google Web Designer*\"\n\n$machineKey = 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n$machineKey32on64 = 'HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n\n$exitCode = $null\n\ntry {\n\n[array]$uninstallKeys = Get-ChildItem `\n -Path @($machineKey, $machineKey32on64) `\n -ErrorAction SilentlyContinue |\n ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue }\n\n$selected = $uninstallKeys |\n Where-Object { $_.DisplayName -like $softwareNameLike } |\n Select-Object -First 1\nif (-not $selected -or -not $selected.UninstallString) {\n Write-Host \"Uninstall entry not found for $softwareNameLike\"\n Exit 1\n}\n\n$raw = if ($selected.QuietUninstallString) { $selected.QuietUninstallString } else { $selected.UninstallString }\n\n# Parse exe + args (quoted / unquoted / bare).\nif ($raw -match '^\\s*\"([^\"]+)\"\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} elseif ($raw -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} else {\n $exe = $raw; $exeArgs = \"\"\n}\n\n# NSIS uninstallers require /S for a silent uninstall.\nif ($exeArgs -notmatch '(?i)(^|\\s)/S(\\s|$)') { $exeArgs = \"$exeArgs /S\".Trim() }\n\nWrite-Host \"Uninstall command: $exe\"\nWrite-Host \"Uninstall args: $exeArgs\"\n$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Uninstall exit code: $exitCode\"\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n\nif ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n" + } +} diff --git a/ee/maintained-apps/outputs/graphviz/windows.json b/ee/maintained-apps/outputs/graphviz/windows.json new file mode 100644 index 0000000000..a2188441db --- /dev/null +++ b/ee/maintained-apps/outputs/graphviz/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "15.1.0", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Graphviz' AND publisher = 'Graphviz';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Graphviz' AND publisher = 'Graphviz' AND version_compare(version, '15.1.0') < 0);" + }, + "installer_url": "https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/15.1.0/windows_10_cmake_Release_graphviz-install-15.1.0-win64.exe", + "install_script_ref": "8456d4ce", + "uninstall_script_ref": "f6831952", + "sha256": "45f20128e6b86e54eb3c2f0ac94d4232d33b9c8a7a81ac171c3d393b8d19bcdc", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "8456d4ce": "# Learn more about .exe install scripts:\n# http://fleetdm.com/learn-more-about/exe-install-scripts\n#\n# Graphviz is a Nullsoft (NSIS) installer declaring machine scope; /S runs it\n# silently and installs machine-wide to Program Files.\n\n$exeFilePath = \"${env:INSTALLER_PATH}\"\n\ntry {\n\n$process = Start-Process -FilePath \"$exeFilePath\" -ArgumentList \"/S\" -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Install exit code: $exitCode\"\n\n# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated\nif ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n", + "f6831952": "# Uninstalls Graphviz. Locates the NSIS uninstaller from the registry by\n# DisplayName and runs it silently with /S.\n\n$softwareNameLike = \"Graphviz*\"\n\n$machineKey = 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n$machineKey32on64 = 'HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n\n$exitCode = $null\n\ntry {\n\n[array]$uninstallKeys = Get-ChildItem `\n -Path @($machineKey, $machineKey32on64) `\n -ErrorAction SilentlyContinue |\n ForEach-Object { Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue }\n\n$selected = $uninstallKeys |\n Where-Object { $_.DisplayName -like $softwareNameLike } |\n Select-Object -First 1\nif (-not $selected -or -not $selected.UninstallString) {\n Write-Host \"Uninstall entry not found for $softwareNameLike\"\n Exit 1\n}\n\n$raw = if ($selected.QuietUninstallString) { $selected.QuietUninstallString } else { $selected.UninstallString }\n\n# Parse exe + args (quoted / unquoted / bare).\nif ($raw -match '^\\s*\"([^\"]+)\"\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} elseif ($raw -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') {\n $exe = $matches[1]; $exeArgs = $matches[2].Trim()\n} else {\n $exe = $raw; $exeArgs = \"\"\n}\n\n# NSIS uninstallers require /S for a silent uninstall.\nif ($exeArgs -notmatch '(?i)(^|\\s)/S(\\s|$)') { $exeArgs = \"$exeArgs /S\".Trim() }\n\nWrite-Host \"Uninstall command: $exe\"\nWrite-Host \"Uninstall args: $exeArgs\"\n$process = Start-Process -FilePath $exe -ArgumentList $exeArgs -PassThru -Wait\n$exitCode = $process.ExitCode\nWrite-Host \"Uninstall exit code: $exitCode\"\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n\nif ($exitCode -eq 0 -or $exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n" + } +} diff --git a/ee/maintained-apps/outputs/grepwin/windows.json b/ee/maintained-apps/outputs/grepwin/windows.json new file mode 100644 index 0000000000..e6dd6ad5bd --- /dev/null +++ b/ee/maintained-apps/outputs/grepwin/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "2.1.1434", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'grepWin' AND publisher = 'Stefans Tools';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'grepWin' AND publisher = 'Stefans Tools' AND version_compare(version, '2.1.1434') < 0);" + }, + "installer_url": "https://github.com/stefankueng/grepWin/releases/download/2.1.12/grepWin-2.1.12-x64.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "249e28e5", + "sha256": "e70cbcc64c966d333940779bf4c5a041bfd9d093a47bb48b48933033ee76fdfc", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{C73ED533-953E-47E5-9A42-A48292BB7C6C}" + } + ], + "refs": { + "249e28e5": "# 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('{C73ED533-953E-47E5-9A42-A48292BB7C6C}')) {\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" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/GadwinPrintscreen.tsx b/frontend/pages/SoftwarePage/components/icons/GadwinPrintscreen.tsx new file mode 100644 index 0000000000..9138cdb2d7 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/GadwinPrintscreen.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const GadwinPrintscreen = (props: SVGProps) => ( + + + +); +export default GadwinPrintscreen; diff --git a/frontend/pages/SoftwarePage/components/icons/GadwinPrintscreenPro.tsx b/frontend/pages/SoftwarePage/components/icons/GadwinPrintscreenPro.tsx new file mode 100644 index 0000000000..ba2adcd171 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/GadwinPrintscreenPro.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const GadwinPrintscreenPro = (props: SVGProps) => ( + + + +); +export default GadwinPrintscreenPro; diff --git a/frontend/pages/SoftwarePage/components/icons/GalaxyModeler.tsx b/frontend/pages/SoftwarePage/components/icons/GalaxyModeler.tsx new file mode 100644 index 0000000000..4c6ce49ed3 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/GalaxyModeler.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const GalaxyModeler = (props: SVGProps) => ( + + + +); +export default GalaxyModeler; diff --git a/frontend/pages/SoftwarePage/components/icons/GarminBasecamp.tsx b/frontend/pages/SoftwarePage/components/icons/GarminBasecamp.tsx new file mode 100644 index 0000000000..332bb2447f --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/GarminBasecamp.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const GarminBasecamp = (props: SVGProps) => ( + + + +); +export default GarminBasecamp; diff --git a/frontend/pages/SoftwarePage/components/icons/GeogebraClassic.tsx b/frontend/pages/SoftwarePage/components/icons/GeogebraClassic.tsx new file mode 100644 index 0000000000..d345f49165 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/GeogebraClassic.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const GeogebraClassic = (props: SVGProps) => ( + + + +); +export default GeogebraClassic; diff --git a/frontend/pages/SoftwarePage/components/icons/Go.tsx b/frontend/pages/SoftwarePage/components/icons/Go.tsx new file mode 100644 index 0000000000..489db25d03 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Go.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Go = (props: SVGProps) => ( + + + +); +export default Go; diff --git a/frontend/pages/SoftwarePage/components/icons/GoanywhereOpenpgpStudio.tsx b/frontend/pages/SoftwarePage/components/icons/GoanywhereOpenpgpStudio.tsx new file mode 100644 index 0000000000..e24b31434e --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/GoanywhereOpenpgpStudio.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const GoanywhereOpenpgpStudio = (props: SVGProps) => ( + + + +); +export default GoanywhereOpenpgpStudio; diff --git a/frontend/pages/SoftwarePage/components/icons/GoldendictNg.tsx b/frontend/pages/SoftwarePage/components/icons/GoldendictNg.tsx new file mode 100644 index 0000000000..a23e5ab437 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/GoldendictNg.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const GoldendictNg = (props: SVGProps) => ( + + + +); +export default GoldendictNg; diff --git a/frontend/pages/SoftwarePage/components/icons/GoogleAdsEditor.tsx b/frontend/pages/SoftwarePage/components/icons/GoogleAdsEditor.tsx new file mode 100644 index 0000000000..7d03c575be --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/GoogleAdsEditor.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const GoogleAdsEditor = (props: SVGProps) => ( + + + +); +export default GoogleAdsEditor; diff --git a/frontend/pages/SoftwarePage/components/icons/GoogleWebDesigner.tsx b/frontend/pages/SoftwarePage/components/icons/GoogleWebDesigner.tsx new file mode 100644 index 0000000000..a0ac71aa2a --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/GoogleWebDesigner.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const GoogleWebDesigner = (props: SVGProps) => ( + + + +); +export default GoogleWebDesigner; diff --git a/frontend/pages/SoftwarePage/components/icons/Graphviz.tsx b/frontend/pages/SoftwarePage/components/icons/Graphviz.tsx new file mode 100644 index 0000000000..ca6fb9330e --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Graphviz.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Graphviz = (props: SVGProps) => ( + + + +); +export default Graphviz; diff --git a/frontend/pages/SoftwarePage/components/icons/Grepwin.tsx b/frontend/pages/SoftwarePage/components/icons/Grepwin.tsx new file mode 100644 index 0000000000..e0a516215e --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Grepwin.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Grepwin = (props: SVGProps) => ( + + + +); +export default Grepwin; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index f804a0fe85..4fc05ea99c 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -412,6 +412,10 @@ import Freefilesync from "./Freefilesync"; import Front from "./Front"; import Fsmonitor from "./Fsmonitor"; import Funter from "./Funter"; +import GadwinPrintscreen from "./GadwinPrintscreen"; +import GadwinPrintscreenPro from "./GadwinPrintscreenPro"; +import GalaxyModeler from "./GalaxyModeler"; +import GarminBasecamp from "./GarminBasecamp"; import GarminExpress from "./GarminExpress"; import Gather from "./Gather"; import Gdevelop from "./Gdevelop"; @@ -419,6 +423,7 @@ import Geany from "./Geany"; import Geekbench from "./Geekbench"; import Gemini2 from "./Gemini2"; import GenesysCloud from "./GenesysCloud"; +import GeogebraClassic from "./GeogebraClassic"; import Gephi from "./Gephi"; import Ghostty from "./Ghostty"; import Gimp from "./Gimp"; @@ -430,22 +435,29 @@ import Gitify from "./Gitify"; import GitKraken from "./GitKraken"; import GitupApp from "./GitupApp"; import Glyphs from "./Glyphs"; +import Go from "./Go"; import Go2Shell from "./Go2Shell"; +import GoanywhereOpenpgpStudio from "./GoanywhereOpenpgpStudio"; import Godot from "./Godot"; import Godspeed from "./Godspeed"; import GogGalaxy from "./GogGalaxy"; import GoLand from "./GoLand"; +import GoldendictNg from "./GoldendictNg"; import Goodsync from "./Goodsync"; +import GoogleAdsEditor from "./GoogleAdsEditor"; import GoogleCredentialProviderForWindows from "./GoogleCredentialProviderForWindows"; import GoogleDrive from "./GoogleDrive"; import GoogleEarthPro from "./GoogleEarthPro"; import GoogleGemini from "./GoogleGemini"; +import GoogleWebDesigner from "./GoogleWebDesigner"; import GoToMeeting from "./GoToMeeting"; import GpgKeychain from "./GpgKeychain"; import Gpodder from "./Gpodder"; import GrammarlyDesktop from "./GrammarlyDesktop"; import Grandperspective from "./Grandperspective"; import Granola from "./Granola"; +import Graphviz from "./Graphviz"; +import Grepwin from "./Grepwin"; import Grids from "./Grids"; import GrooveOmniDialer from "./GrooveOmniDialer"; import Gyazo from "./Gyazo"; @@ -1518,6 +1530,10 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { front: Front, fsmonitor: Fsmonitor, funter: Funter, + "gadwin printscreen": GadwinPrintscreen, + "gadwin printscreen pro": GadwinPrintscreenPro, + "galaxy modeler": GalaxyModeler, + "garmin basecamp": GarminBasecamp, "garmin express": GarminExpress, "gather town": Gather, gdevelop: Gdevelop, @@ -1526,6 +1542,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { gemini: GoogleGemini, "gemini 2": Gemini2, "genesys cloud": GenesysCloud, + "geogebra classic": GeogebraClassic, gephi: Gephi, ghostty: Ghostty, gimp: Gimp, @@ -1537,12 +1554,16 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { gitkraken: GitKraken, gitup: GitupApp, glyphs: Glyphs, + go: Go, go2shell: Go2Shell, + "goanywhere openpgp studio": GoanywhereOpenpgpStudio, "godot engine": Godot, godspeed: Godspeed, "gog galaxy": GogGalaxy, goland: GoLand, + "goldendict-ng": GoldendictNg, goodsync: Goodsync, + "google ads editor": GoogleAdsEditor, "google antigravity": Antigravity, "google antigravity ide": AntigravityIde, "google chrome": ChromeApp, @@ -1550,6 +1571,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "google drive": GoogleDrive, "google earth pro": GoogleEarthPro, "google gemini": GoogleGemini, + "google web designer": GoogleWebDesigner, gotomeeting: GoToMeeting, "gpg keychain": GpgKeychain, "gpg suite": GpgKeychain, @@ -1558,6 +1580,8 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { grandperspective: Grandperspective, granola: Granola, "graphpad prism": Prism, + graphviz: Graphviz, + grepwin: Grepwin, grids: Grids, "groove omnidialer": GrooveOmniDialer, hammerspoon: Hammerspoon, diff --git a/website/assets/images/app-icon-gadwin-printscreen-60x60@2x.png b/website/assets/images/app-icon-gadwin-printscreen-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f45d80362ffdd601d3a6d2f19101334ffbf36956 GIT binary patch literal 17975 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%0DLO%ss3rjK~_N-4foJuw^{i5tmp<4QlF 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-geogebra-classic-60x60@2x.png b/website/assets/images/app-icon-geogebra-classic-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9c3d9f355eeb561f46120e57d4d9a79abbf8c2 GIT binary patch literal 8959 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 z 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-google-ads-editor-60x60@2x.png b/website/assets/images/app-icon-google-ads-editor-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a86322298396c1faa9d968ed706bedb6e3b475fa GIT binary patch literal 6455 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