Files
Allen HouchinsandCopilot Autofix powered by AI 2bfc902b82 Add even more Windows FMAs (#47584)
This pull request adds support for several new Windows applications to
the maintained apps list by introducing new JSON manifest files and
corresponding install/uninstall scripts. Each manifest provides
configuration details required for automated installation and
categorization.

**New application manifests added:**

_Productivity applications:_
* Added `nagstamon.json` for Nagstamon, including install/uninstall
scripts and an installation script using Inno Setup silent options.
[[1]](diffhunk://#diff-3c74eeef956d1978f39fb41e4a4c8373a177d3ba899e30cfc7c23de097132689R1-R12)
[[2]](diffhunk://#diff-8befb290da9fe695b0d4c5725a819262c482367c26e5c725e64507abb54638d1R1-R26)
* Added manifests for Notesnook, ocenaudio, OpenRefine, Portfolio
Performance, PreForm, Proton Drive, Readest, Remote Desktop Manager,
Royal TSX, and RetroArch.
[[1]](diffhunk://#diff-8f46fa9ee50b09b7c763c04146a369add5d7edec998ccb1fdcd8b961d6250f2cR1-R13)
[[2]](diffhunk://#diff-3e717b6b7498ecf39f00e628d51b6b6884545e9a781605fba7ec3fdd3e9ece35R1-R12)
[[3]](diffhunk://#diff-ef74fc4e086aabedf80c1ef26493442f24e01dbbbfc169ecde810b6ecfbbc154R1-R12)
[[4]](diffhunk://#diff-0e0d13f35ef324e599a8487825d4844c2f60ad4d1bc68dc2a4f06f8276b85c5dR1-R12)
[[5]](diffhunk://#diff-c395a54083c1e88011dae0ba639b32dcb173ce21b0e21abb8b65ff5335418c38R1-R12)
[[6]](diffhunk://#diff-3a05b3cd4f042b709d41364f93b1d9cea907f0ad8bccf9514cda282a2c2632a3R1-R12)
[[7]](diffhunk://#diff-093dfe2c06862cee70bf9b57dcd535660a41665eba49b095b91b8fa6ffcdf99dR1-R12)
[[8]](diffhunk://#diff-09f2f1905ce5794bf248dcf0d2724b435a2255451adeeac3226197ceea7863f9R1-R10)
[[9]](diffhunk://#diff-00f35514528449c1248f5369bd4143470a48692415b228615c23326f5cbccc87R1-R10)
[[10]](diffhunk://#diff-1ccb271d6fb63b2a250720c43073502dc71c1b1adc6ffd951de002ea426ef785R1-R12)

_Developer tools:_
* Added manifests for NoSQL Workbench, Proxyman, and Reqable, each with
install/uninstall scripts.
[[1]](diffhunk://#diff-13c131b80d23c96d4a163c3842f6b5138b908a478b89edb4a42d5379ed7ba174R1-R12)
[[2]](diffhunk://#diff-e963cb7961788f69a34e407e6ae046cf13dc66af1e2ac0f57a42cdf1b114c568R1-R12)
[[3]](diffhunk://#diff-da81ab2f561640b12b95cae1ceb2ab022f228acdfc94d9005e885261d52224a5R1-R12)

_Browsers:_
* Added manifests for Pale Moon and Safe Exam Browser, including
install/uninstall scripts.
[[1]](diffhunk://#diff-3cee4f5e3d10ec8db232ae70aac509b86ca0eb4d5e4f97f677ecba66a178232eR1-R12)
[[2]](diffhunk://#diff-211c50486f9997fbdd63aa081c265a8e6d27d91f6ed00237d3f3e92f41bfcd98R1-R12)

_Other tools:_
* Added manifest for ProtoPie and Requestly, both with install/uninstall
scripts.
[[1]](diffhunk://#diff-8daee55ad74b517db4b49aaef6e80a329e27702a5e6f81c280685ebe520c6c62R1-R12)
[[2]](diffhunk://#diff-9c8c73d3492b7bf6cd819f2f6ba3a012441f4a8d51ecffd99b101462e074756bR1-R13)

**Script additions:**
* Introduced a PowerShell install script for Nagstamon
(`nagstamon_install.ps1`) that uses silent install flags for unattended
installation.

These changes expand the catalog of supported Windows applications,
enabling automated deployment and management for a wider range of
software.

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-16 08:36:17 -05:00

84 lines
2.2 KiB
PowerShell

$softwareName = "YACReader"
$softwareNameLike = "$softwareName*"
$publisherName = ""
$hkcuKey = 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*'
$machineKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*'
$machineKey32 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
$exitCode = 0
try {
[array]$uninstallKeys = Get-ChildItem `
-Path @($hkcuKey, $machineKey, $machineKey32) `
-ErrorAction SilentlyContinue |
ForEach-Object { Get-ItemProperty $_.PSPath }
$foundUninstaller = $false
foreach ($key in $uninstallKeys) {
if (-not ($key.DisplayName -eq $softwareName -or $key.DisplayName -like $softwareNameLike)) {
continue
}
if (-not ($publisherName -eq "" -or $key.Publisher -like "*$publisherName*")) {
continue
}
$foundUninstaller = $true
$uninstallCommand = if ($key.QuietUninstallString) {
$key.QuietUninstallString
} else {
$key.UninstallString
}
# Parse the uninstaller exe path from the command string
$uninstallExe = $null
if ($uninstallCommand -match '^"([^"]+)"') {
$uninstallExe = $matches[1]
} elseif ($uninstallCommand -match '^(.+?\.exe)') {
$uninstallExe = $matches[1]
} else {
$uninstallExe = $uninstallCommand
}
# Determine the install directory
if ($key.InstallLocation -and (Test-Path $key.InstallLocation)) {
$installDir = $key.InstallLocation
} else {
$installDir = Split-Path -Parent $uninstallExe
}
$uninstallArgs = @("/VERYSILENT", "/NORESTART")
Write-Host "Uninstall command: $uninstallExe"
Write-Host "Uninstall args: $uninstallArgs"
$processOptions = @{
FilePath = $uninstallExe
ArgumentList = $uninstallArgs
PassThru = $true
Wait = $true
}
$process = Start-Process @processOptions
$exitCode = $process.ExitCode
Write-Host "Uninstall exit code: $exitCode"
Remove-Item $installDir -Recurse -Force -ErrorAction SilentlyContinue
break
}
if (-not $foundUninstaller) {
Write-Host "Uninstall entry not found"
Exit 0
}
} catch {
Write-Host "Error: $_"
Exit 1
}
Exit $exitCode