From e36ae71e2d439144efd56ed819c8de1ec2517c0c Mon Sep 17 00:00:00 2001 From: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> Date: Sat, 6 Jun 2026 22:56:24 -0500 Subject: [PATCH] Add WinRAR as a Windows FMA (#47024) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Adds **WinRAR 7.22.0** as a Fleet-maintained app (Windows / winget `RARLab.WinRAR`). ## Details - **Installer type**: `exe` (WinRAR self-extracting installer), machine scope → custom install/uninstall scripts (the ingester only auto-generates for machine-scope MSI). - **Silent install**: `-s1` — from the winget manifest's documented `InstallerSwitches.Silent`. - **Silent uninstall**: `uninstall.exe /S` located via the registry `UninstallString`, parsed with the defensive 3-shape matcher. - **Identity**: `unique_identifier: "WinRAR"` + `fuzzy_match_name: true` → exists query `name LIKE 'WinRAR %' AND publisher = 'win.rar GmbH'`. Fuzzy match is required because WinRAR's registry DisplayName embeds the version (`WinRAR 7.22.0 (64-bit)`). Registry Publisher matches the winget locale Publisher, so no `program_publisher` override. - **SHA**: matches the manifest's en-x64 installer; version `7.22.0` reconciles with osquery's DisplayVersion. - **Icon**: generated component, website PNG, and `index.ts` map entry (`winrar`). ## Notes / risks - Installer URL (`https://www.rarlab.com/rar/winrar-x64-722.exe`) is version-pinned, so the SHA is stable until the FMA auto-update bumps it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) ## Summary by CodeRabbit * **New Features** * Added WinRAR application support, including version 7.22.0 with automated installation and uninstallation capabilities. * Added custom WinRAR icon for improved visibility on the software page. --- .../inputs/winget/scripts/winrar_install.ps1 | 31 +++++++++ .../winget/scripts/winrar_uninstall.ps1 | 65 ++++++++++++++++++ ee/maintained-apps/inputs/winget/winrar.json | 13 ++++ ee/maintained-apps/outputs/apps.json | 7 ++ .../outputs/winrar/windows.json | 22 ++++++ .../SoftwarePage/components/icons/Winrar.tsx | 14 ++++ .../SoftwarePage/components/icons/index.ts | 2 + .../images/app-icon-winrar-60x60@2x.png | Bin 0 -> 26727 bytes 8 files changed, 154 insertions(+) create mode 100644 ee/maintained-apps/inputs/winget/scripts/winrar_install.ps1 create mode 100644 ee/maintained-apps/inputs/winget/scripts/winrar_uninstall.ps1 create mode 100644 ee/maintained-apps/inputs/winget/winrar.json create mode 100644 ee/maintained-apps/outputs/winrar/windows.json create mode 100644 frontend/pages/SoftwarePage/components/icons/Winrar.tsx create mode 100644 website/assets/images/app-icon-winrar-60x60@2x.png diff --git a/ee/maintained-apps/inputs/winget/scripts/winrar_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/winrar_install.ps1 new file mode 100644 index 0000000000..bb9faba41f --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/winrar_install.ps1 @@ -0,0 +1,31 @@ +# Learn more about .exe install scripts: +# http://fleetdm.com/learn-more-about/exe-install-scripts +# +# WinRAR ships as a self-extracting installer. "-s1" performs a silent +# install with no windows; it installs per-machine into Program Files. + +$exeFilePath = "${env:INSTALLER_PATH}" + +try { + if (-not (Test-Path $exeFilePath)) { + Write-Host "Error: Installer file not found at: $exeFilePath" + Exit 1 + } + + $processOptions = @{ + FilePath = "$exeFilePath" + ArgumentList = "-s1" + PassThru = $true + Wait = $true + NoNewWindow = $true + } + + $process = Start-Process @processOptions + $exitCode = $process.ExitCode + Write-Host "Install exit code: $exitCode" + Exit $exitCode + +} catch { + Write-Host "Error: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/scripts/winrar_uninstall.ps1 b/ee/maintained-apps/inputs/winget/scripts/winrar_uninstall.ps1 new file mode 100644 index 0000000000..4a6b78dd97 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/winrar_uninstall.ps1 @@ -0,0 +1,65 @@ +# Attempts to locate WinRAR's uninstaller from the registry and run it silently. +# WinRAR's UninstallString points at "\uninstall.exe", which accepts /S. + +$displayNameLike = "WinRAR*" +$publisher = "win.rar GmbH" + +$paths = @( + 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', + 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall' +) + +$uninstall = $null +foreach ($p in $paths) { + $items = Get-ItemProperty "$p\*" -ErrorAction SilentlyContinue | Where-Object { + $_.DisplayName -like $displayNameLike -and $_.Publisher -like "$publisher*" + } + if ($items) { $uninstall = $items | Select-Object -First 1; break } +} + +if (-not $uninstall -or -not $uninstall.UninstallString) { + Write-Host "Uninstall entry not found" + Exit 0 +} + +Stop-Process -Name "WinRAR" -Force -ErrorAction SilentlyContinue + +$uninstallCommand = $uninstall.UninstallString +$uninstallArgs = "/S" + +# Parse the UninstallString defensively for the three common shapes. +if ($uninstallCommand -match '^\s*"([^"]+)"\s*(.*)$') { # quoted path + $uninstallCommand = $matches[1] + $existingArgs = $matches[2].Trim() +} elseif ($uninstallCommand -match '(?i)^\s*(.+?\.exe)\s*(.*)$') { # unquoted, may contain spaces + $uninstallCommand = $matches[1] + $existingArgs = $matches[2].Trim() +} elseif ($uninstallCommand -match '^\s*(\S+)\s*(.*)$') { # bare token + $uninstallCommand = $matches[1] + $existingArgs = $matches[2].Trim() +} + +if ($existingArgs -and $existingArgs -ne '') { + $uninstallArgs = "$existingArgs $uninstallArgs" +} + +Write-Host "Uninstall command: $uninstallCommand" +Write-Host "Uninstall args: $uninstallArgs" + +try { + $processOptions = @{ + FilePath = $uninstallCommand + ArgumentList = $uninstallArgs + NoNewWindow = $true + PassThru = $true + Wait = $true + } + + $process = Start-Process @processOptions + $exitCode = $process.ExitCode + Write-Host "Uninstall exit code: $exitCode" + Exit $exitCode +} catch { + Write-Host "Error running uninstaller: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/winrar.json b/ee/maintained-apps/inputs/winget/winrar.json new file mode 100644 index 0000000000..f5c88ab353 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/winrar.json @@ -0,0 +1,13 @@ +{ + "name": "WinRAR", + "slug": "winrar/windows", + "package_identifier": "RARLab.WinRAR", + "unique_identifier": "WinRAR", + "fuzzy_match_name": true, + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/winrar_install.ps1", + "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/winrar_uninstall.ps1", + "installer_arch": "x64", + "installer_type": "exe", + "installer_scope": "machine", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index d372e8ae3c..e9aecd9cd6 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -2794,6 +2794,13 @@ "unique_identifier": "Windsurf", "description": "Windsurf is an agentic IDE powered by AI Flow paradigm." }, + { + "name": "WinRAR", + "slug": "winrar/windows", + "platform": "windows", + "unique_identifier": "WinRAR", + "description": "WinRAR is a file archiver utility for Windows. It creates and extracts RAR and ZIP archives and supports compression, encryption, and splitting archives into volumes." + }, { "name": "WinSCP", "slug": "winscp/windows", diff --git a/ee/maintained-apps/outputs/winrar/windows.json b/ee/maintained-apps/outputs/winrar/windows.json new file mode 100644 index 0000000000..cb6444bdd0 --- /dev/null +++ b/ee/maintained-apps/outputs/winrar/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "7.22.0", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'WinRAR %' AND publisher = 'win.rar GmbH';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'WinRAR %' AND publisher = 'win.rar GmbH' AND version_compare(version, '7.22.0') < 0);" + }, + "installer_url": "https://www.rarlab.com/rar/winrar-x64-722.exe", + "install_script_ref": "5879db33", + "uninstall_script_ref": "48a0291b", + "sha256": "d669f4e15e9b8fde6e6dcc47697fc5a38b77e1fd5c608cf6423e4eba8df62498", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "48a0291b": "# Attempts to locate WinRAR's uninstaller from the registry and run it silently.\n# WinRAR's UninstallString points at \"\\uninstall.exe\", which accepts /S.\n\n$displayNameLike = \"WinRAR*\"\n$publisher = \"win.rar GmbH\"\n\n$paths = @(\n 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall',\n 'HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall'\n)\n\n$uninstall = $null\nforeach ($p in $paths) {\n $items = Get-ItemProperty \"$p\\*\" -ErrorAction SilentlyContinue | Where-Object {\n $_.DisplayName -like $displayNameLike -and $_.Publisher -like \"$publisher*\"\n }\n if ($items) { $uninstall = $items | Select-Object -First 1; break }\n}\n\nif (-not $uninstall -or -not $uninstall.UninstallString) {\n Write-Host \"Uninstall entry not found\"\n Exit 0\n}\n\nStop-Process -Name \"WinRAR\" -Force -ErrorAction SilentlyContinue\n\n$uninstallCommand = $uninstall.UninstallString\n$uninstallArgs = \"/S\"\n\n# Parse the UninstallString defensively for the three common shapes.\nif ($uninstallCommand -match '^\\s*\"([^\"]+)\"\\s*(.*)$') { # quoted path\n $uninstallCommand = $matches[1]\n $existingArgs = $matches[2].Trim()\n} elseif ($uninstallCommand -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') { # unquoted, may contain spaces\n $uninstallCommand = $matches[1]\n $existingArgs = $matches[2].Trim()\n} elseif ($uninstallCommand -match '^\\s*(\\S+)\\s*(.*)$') { # bare token\n $uninstallCommand = $matches[1]\n $existingArgs = $matches[2].Trim()\n}\n\nif ($existingArgs -and $existingArgs -ne '') {\n $uninstallArgs = \"$existingArgs $uninstallArgs\"\n}\n\nWrite-Host \"Uninstall command: $uninstallCommand\"\nWrite-Host \"Uninstall args: $uninstallArgs\"\n\ntry {\n $processOptions = @{\n FilePath = $uninstallCommand\n ArgumentList = $uninstallArgs\n NoNewWindow = $true\n PassThru = $true\n Wait = $true\n }\n\n $process = Start-Process @processOptions\n $exitCode = $process.ExitCode\n Write-Host \"Uninstall exit code: $exitCode\"\n Exit $exitCode\n} catch {\n Write-Host \"Error running uninstaller: $_\"\n Exit 1\n}\n", + "5879db33": "# Learn more about .exe install scripts:\n# http://fleetdm.com/learn-more-about/exe-install-scripts\n#\n# WinRAR ships as a self-extracting installer. \"-s1\" performs a silent\n# install with no windows; it installs per-machine into Program Files.\n\n$exeFilePath = \"${env:INSTALLER_PATH}\"\n\ntry {\n if (-not (Test-Path $exeFilePath)) {\n Write-Host \"Error: Installer file not found at: $exeFilePath\"\n Exit 1\n }\n\n $processOptions = @{\n FilePath = \"$exeFilePath\"\n ArgumentList = \"-s1\"\n PassThru = $true\n Wait = $true\n NoNewWindow = $true\n }\n\n $process = Start-Process @processOptions\n $exitCode = $process.ExitCode\n Write-Host \"Install exit code: $exitCode\"\n Exit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/Winrar.tsx b/frontend/pages/SoftwarePage/components/icons/Winrar.tsx new file mode 100644 index 0000000000..7d9f4f95bd --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Winrar.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Winrar = (props: SVGProps) => ( + + + +); +export default Winrar; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index 44f738a668..2c8599fc50 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -293,6 +293,7 @@ import WindowsAppRemote from "./WindowsAppRemote"; import WindowsDefender from "./WindowsDefender"; import WindowsOS from "./WindowsOS"; import Windsurf from "./Windsurf"; +import Winrar from "./Winrar"; import Winscp from "./Winscp"; import Wireshark from "./Wireshark"; import Word from "./Word"; @@ -613,6 +614,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "windows app remote": WindowsAppRemote, "windows defender": WindowsDefender, windsurf: Windsurf, + winrar: Winrar, winscp: Winscp, wireshark: Wireshark, "wrike for mac": WrikeForMac, diff --git a/website/assets/images/app-icon-winrar-60x60@2x.png b/website/assets/images/app-icon-winrar-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c89df983f9dfa53f0b5c6a3298c40b64e5bb233e GIT binary patch literal 26727 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