diff --git a/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-11.json b/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-11.json new file mode 100644 index 00000000000..0ce1c1304d1 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-11.json @@ -0,0 +1,13 @@ +{ + "name": "Eclipse Temurin JDK 11", + "slug": "eclipse-temurin-jdk-11/windows", + "package_identifier": "EclipseAdoptium.Temurin.11.JDK", + "unique_identifier": "Eclipse Temurin JDK with Hotspot", + "exists_query": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '11.%';", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-17.json b/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-17.json new file mode 100644 index 00000000000..21f57a8c831 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-17.json @@ -0,0 +1,13 @@ +{ + "name": "Eclipse Temurin JDK 17", + "slug": "eclipse-temurin-jdk-17/windows", + "package_identifier": "EclipseAdoptium.Temurin.17.JDK", + "unique_identifier": "Eclipse Temurin JDK with Hotspot", + "exists_query": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '17.%';", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-21.json b/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-21.json new file mode 100644 index 00000000000..31c16c9e9e9 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-21.json @@ -0,0 +1,13 @@ +{ + "name": "Eclipse Temurin JDK 21", + "slug": "eclipse-temurin-jdk-21/windows", + "package_identifier": "EclipseAdoptium.Temurin.21.JDK", + "unique_identifier": "Eclipse Temurin JDK with Hotspot", + "exists_query": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '21.%';", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-8.json b/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-8.json new file mode 100644 index 00000000000..1ae5b7ce2c8 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/eclipse-temurin-jdk-8.json @@ -0,0 +1,13 @@ +{ + "name": "Eclipse Temurin JDK 8", + "slug": "eclipse-temurin-jdk-8/windows", + "package_identifier": "EclipseAdoptium.Temurin.8.JDK", + "unique_identifier": "Eclipse Temurin JDK with Hotspot", + "exists_query": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '8.%';", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-11.json b/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-11.json new file mode 100644 index 00000000000..aacb6f39299 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-11.json @@ -0,0 +1,13 @@ +{ + "name": "Eclipse Temurin JRE 11", + "slug": "eclipse-temurin-jre-11/windows", + "package_identifier": "EclipseAdoptium.Temurin.11.JRE", + "unique_identifier": "Eclipse Temurin JRE with Hotspot", + "exists_query": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '11.%';", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-17.json b/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-17.json new file mode 100644 index 00000000000..303fd3a49fc --- /dev/null +++ b/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-17.json @@ -0,0 +1,13 @@ +{ + "name": "Eclipse Temurin JRE 17", + "slug": "eclipse-temurin-jre-17/windows", + "package_identifier": "EclipseAdoptium.Temurin.17.JRE", + "unique_identifier": "Eclipse Temurin JRE with Hotspot", + "exists_query": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '17.%';", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-21.json b/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-21.json new file mode 100644 index 00000000000..d0197965df1 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-21.json @@ -0,0 +1,13 @@ +{ + "name": "Eclipse Temurin JRE 21", + "slug": "eclipse-temurin-jre-21/windows", + "package_identifier": "EclipseAdoptium.Temurin.21.JRE", + "unique_identifier": "Eclipse Temurin JRE with Hotspot", + "exists_query": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '21.%';", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-8.json b/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-8.json new file mode 100644 index 00000000000..d96794f93a4 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/eclipse-temurin-jre-8.json @@ -0,0 +1,13 @@ +{ + "name": "Eclipse Temurin JRE 8", + "slug": "eclipse-temurin-jre-8/windows", + "package_identifier": "EclipseAdoptium.Temurin.8.JRE", + "unique_identifier": "Eclipse Temurin JRE with Hotspot", + "exists_query": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '8.%';", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": [ + "Developer tools" + ] +} diff --git a/ee/maintained-apps/inputs/winget/egnyte-webedit.json b/ee/maintained-apps/inputs/winget/egnyte-webedit.json new file mode 100644 index 00000000000..6cc2eb82044 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/egnyte-webedit.json @@ -0,0 +1,10 @@ +{ + "name": "Egnyte WebEdit", + "slug": "egnyte-webedit/windows", + "package_identifier": "Egnyte.EgnyteWebEdit", + "unique_identifier": "Egnyte WebEdit", + "installer_arch": "x86", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/inputs/winget/elevate-uc.json b/ee/maintained-apps/inputs/winget/elevate-uc.json new file mode 100644 index 00000000000..3e7aae98f47 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/elevate-uc.json @@ -0,0 +1,11 @@ +{ + "name": "Elevate UC", + "slug": "elevate-uc/windows", + "package_identifier": "Serverdata.ElevateUC", + "unique_identifier": "Elevate UC", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "ignore_hash": true, + "default_categories": ["Communication"] +} diff --git a/ee/maintained-apps/inputs/winget/endnote.json b/ee/maintained-apps/inputs/winget/endnote.json new file mode 100644 index 00000000000..cafac0ae5e5 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/endnote.json @@ -0,0 +1,12 @@ +{ + "name": "EndNote", + "slug": "endnote/windows", + "package_identifier": "ClarivateAnalytics.EndNote", + "unique_identifier": "EndNote 2025", + "fuzzy_match_name": "EndNote 20%", + "installer_arch": "x86", + "installer_type": "msi", + "installer_scope": "machine", + "ignore_hash": true, + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/inputs/winget/enpass.json b/ee/maintained-apps/inputs/winget/enpass.json new file mode 100644 index 00000000000..35ec8be4c3d --- /dev/null +++ b/ee/maintained-apps/inputs/winget/enpass.json @@ -0,0 +1,13 @@ +{ + "name": "Enpass", + "slug": "enpass/windows", + "package_identifier": "Sinew.Enpass", + "unique_identifier": "Enpass", + "program_publisher": "Enpass Technologies Inc.", + "installer_arch": "x64", + "installer_type": "exe", + "installer_scope": "machine", + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/enpass_install.ps1", + "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/enpass_uninstall.ps1", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/inputs/winget/evernote.json b/ee/maintained-apps/inputs/winget/evernote.json new file mode 100644 index 00000000000..a71c0df6bb3 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/evernote.json @@ -0,0 +1,14 @@ +{ + "name": "Evernote", + "slug": "evernote/windows", + "package_identifier": "Evernote.Evernote", + "unique_identifier": "Evernote", + "fuzzy_match_name": "Evernote%", + "program_publisher": "Evernote Corporation", + "installer_arch": "x64", + "installer_type": "exe", + "installer_scope": "machine", + "install_script_path": "ee/maintained-apps/inputs/winget/scripts/evernote_install.ps1", + "uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/evernote_uninstall.ps1", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/inputs/winget/scripts/enpass_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/enpass_install.ps1 new file mode 100644 index 00000000000..66a241e3f8f --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/enpass_install.ps1 @@ -0,0 +1,38 @@ +# Learn more about .exe install scripts: +# http://fleetdm.com/learn-more-about/exe-install-scripts +# +# Enpass ships as a WiX "burn" bootstrapper that chains vcredist + the inner +# Enpass MSI and registers a per-machine bundle ARP entry. Silent switches +# follow the burn convention. + +$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 = "/install /quiet /norestart" + PassThru = $true + Wait = $true + NoNewWindow = $true + } + + $process = Start-Process @processOptions + $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/enpass_uninstall.ps1 b/ee/maintained-apps/inputs/winget/scripts/enpass_uninstall.ps1 new file mode 100644 index 00000000000..bde36d1b428 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/enpass_uninstall.ps1 @@ -0,0 +1,79 @@ +# Uninstalls Enpass. +# +# Enpass is a WiX "burn" bundle. The visible ARP entry is the bundle +# (DisplayName "Enpass"); its QuietUninstallString runs the cached +# Enpass-setup.exe with /uninstall /quiet. The inner MSI is ARPSYSTEMCOMPONENT +# (hidden). RestartManager closes the running Enpass tray app during uninstall. Prefer the bundle +# entry (an .exe UninstallString, uninstalls the whole chain with +# /uninstall /quiet /norestart); fall back to the chained MSI entry +# (msiexec /X{ProductCode}) if only that one is present. + +$softwareName = "Enpass" + +$machineKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' +$machineKey32on64 = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' + +function Split-UninstallString { + param([string]$raw) + # Parse into executable + args, handling quoted/unquoted/bare shapes. + if ($raw -match '^\s*"([^"]+)"\s*(.*)$') { + return @($matches[1], $matches[2].Trim()) + } elseif ($raw -match '(?i)^\s*(.+?\.exe)\s*(.*)$') { + return @($matches[1], $matches[2].Trim()) + } + return @($raw, "") +} + +$exitCode = $null + +try { + +[array]$uninstallKeys = Get-ChildItem ` + -Path @($machineKey, $machineKey32on64) ` + -ErrorAction SilentlyContinue | + ForEach-Object { Get-ItemProperty $_.PSPath } + +[array]$matches_ = $uninstallKeys | Where-Object { $_.DisplayName -eq $softwareName } + +# Prefer the burn bundle entry (non-msiexec .exe uninstaller) over the chained MSI. +$bundle = $matches_ | Where-Object { + $raw = if ($_.QuietUninstallString) { $_.QuietUninstallString } else { $_.UninstallString } + $raw -and $raw -notmatch '(?i)msiexec' +} | Select-Object -First 1 +$entry = if ($bundle) { $bundle } else { $matches_ | Select-Object -First 1 } + +if ($entry) { + $raw = if ($entry.QuietUninstallString) { $entry.QuietUninstallString } else { $entry.UninstallString } + $exe, $exeArgs = Split-UninstallString -raw $raw + + if ($exe -match '(?i)msiexec') { + if ($exeArgs -notmatch '(?i)/(x|uninstall)') { $exeArgs = "/X $exeArgs" } + if ($exeArgs -notmatch '(?i)/(qn|quiet)') { $exeArgs = "$exeArgs /qn" } + if ($exeArgs -notmatch '(?i)/norestart') { $exeArgs = "$exeArgs /norestart" } + } else { + if ($exeArgs -notmatch '/uninstall') { $exeArgs = "/uninstall $exeArgs" } + if ($exeArgs -notmatch '/quiet') { $exeArgs = "$exeArgs /quiet" } + if ($exeArgs -notmatch '/norestart') { $exeArgs = "$exeArgs /norestart" } + } + $exeArgs = $exeArgs.Trim() + + Write-Host "Uninstall command: $exe" + Write-Host "Uninstall args: $exeArgs" + $process = Start-Process -FilePath $exe -ArgumentList $exeArgs -NoNewWindow -PassThru -Wait + $exitCode = $process.ExitCode +} + +} catch { + Write-Host "Error: $_" + Exit 1 +} + +if ($null -eq $exitCode) { + Write-Host "Uninstall entry not found for '$softwareName'." + Exit 1 +} + +Write-Host "Uninstall 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 diff --git a/ee/maintained-apps/inputs/winget/scripts/evernote_install.ps1 b/ee/maintained-apps/inputs/winget/scripts/evernote_install.ps1 new file mode 100644 index 00000000000..f7682565e03 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/evernote_install.ps1 @@ -0,0 +1,29 @@ +# Learn more about .exe install scripts: +# http://fleetdm.com/learn-more-about/exe-install-scripts + +$exeFilePath = "${env:INSTALLER_PATH}" + +try { + +# Evernote uses an electron-builder NSIS installer. It defaults to a per-user +# install, so /allusers is required for a machine-wide install alongside the +# NSIS /S silent flag. +$processOptions = @{ + FilePath = "$exeFilePath" + ArgumentList = "/allusers /S" + PassThru = $true + Wait = $true +} + +# Start process and track exit code +$process = Start-Process @processOptions +$exitCode = $process.ExitCode + +# Prints the exit code +Write-Host "Install exit code: $exitCode" +Exit $exitCode + +} catch { + Write-Host "Error: $_" + Exit 1 +} diff --git a/ee/maintained-apps/inputs/winget/scripts/evernote_uninstall.ps1 b/ee/maintained-apps/inputs/winget/scripts/evernote_uninstall.ps1 new file mode 100644 index 00000000000..0cdc5a12499 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/scripts/evernote_uninstall.ps1 @@ -0,0 +1,91 @@ +# Fleet extracts name from installer (EXE) and saves it to PACKAGE_ID +# variable +# Evernote (electron-builder NSIS) registers a versioned DisplayName in HKLM +# when installed with /allusers, e.g. "Evernote 11.24.3 (All Users)". The +# "(All Users)" suffix is locale-dependent, so match on the "Evernote" prefix +# only. Its QuietUninstallString runs "Uninstall Evernote.exe" /allusers /S, +# which also closes the running tray app. +$softwareName = "Evernote" + +$softwareNameLike = "Evernote*" + +# electron-builder NSIS uninstaller; /allusers matches the machine-wide install +$uninstallArgs = "/allusers /S" + +$machineKey = ` + 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' +$machineKey32on64 = ` + 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' + +$exitCode = 0 + +try { + +[array]$uninstallKeys = Get-ChildItem ` + -Path @($machineKey, $machineKey32on64) ` + -ErrorAction SilentlyContinue | + ForEach-Object { Get-ItemProperty $_.PSPath } + +$foundUninstaller = $false +foreach ($key in $uninstallKeys) { + if ($key.DisplayName -like $softwareNameLike) { + $foundUninstaller = $true + # Get the uninstall command. Some uninstallers do not include + # 'QuietUninstallString' and require a flag to run silently. + $uninstallCommand = if ($key.QuietUninstallString) { + $key.QuietUninstallString + } else { + $key.UninstallString + } + + # The uninstall command may contain command and args, like: + # "C:\Program Files\Software\uninstall.exe" /SILENT + # Split the command and args + $splitArgs = $uninstallCommand.Split('"') + if ($splitArgs.Length -gt 1) { + if ($splitArgs.Length -eq 3) { + $uninstallArgs = "$( $splitArgs[2] ) $uninstallArgs".Trim() + } elseif ($splitArgs.Length -gt 3) { + Throw ` + "Uninstall command contains multiple quoted strings. " + + "Please update the uninstall script.`n" + + "Uninstall command: $uninstallCommand" + } + $uninstallCommand = $splitArgs[1] + } + Write-Host "Uninstall command: $uninstallCommand" + Write-Host "Uninstall args: $uninstallArgs" + + $processOptions = @{ + FilePath = $uninstallCommand + PassThru = $true + Wait = $true + } + if ($uninstallArgs -ne '') { + $processOptions.ArgumentList = "$uninstallArgs" + } + + # Start process and track exit code + $process = Start-Process @processOptions + $exitCode = $process.ExitCode + + # Prints the exit code + Write-Host "Uninstall exit code: $exitCode" + # Exit the loop once the software is found and uninstalled. + break + } +} + +if (-not $foundUninstaller) { + Write-Host "Uninstaller for '$softwareName' not found." + # Change exit code to 0 if you don't want to fail if uninstaller is not + # found. This could happen if program was already uninstalled. + $exitCode = 1 +} + +} catch { + Write-Host "Error: $_" + $exitCode = 1 +} + +Exit $exitCode diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 135aebab063..f56dbfd42c6 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -2829,6 +2829,69 @@ "unique_identifier": "epp.package.committers", "description": "Eclipse IDE is an Eclipse integrated development environment for Java." }, + { + "name": "Eclipse Temurin JDK 11", + "slug": "eclipse-temurin-jdk-11/windows", + "platform": "windows", + "unique_identifier": "Eclipse Temurin JDK with Hotspot", + "description": "Eclipse Temurin JDK 11 is the free, open-source OpenJDK 11 distribution from the Eclipse Adoptium project." + }, + { + "name": "Eclipse Temurin JDK 17", + "slug": "eclipse-temurin-jdk-17/windows", + "platform": "windows", + "unique_identifier": "Eclipse Temurin JDK with Hotspot", + "description": "Eclipse Temurin JDK 17 is the free, open-source OpenJDK 17 distribution from the Eclipse Adoptium project." + }, + { + "name": "Eclipse Temurin JDK 21", + "slug": "eclipse-temurin-jdk-21/windows", + "platform": "windows", + "unique_identifier": "Eclipse Temurin JDK with Hotspot", + "description": "Eclipse Temurin JDK 21 is the free, open-source OpenJDK 21 distribution from the Eclipse Adoptium project." + }, + { + "name": "Eclipse Temurin JDK 8", + "slug": "eclipse-temurin-jdk-8/windows", + "platform": "windows", + "unique_identifier": "Eclipse Temurin JDK with Hotspot", + "description": "Eclipse Temurin JDK 8 is the free, open-source OpenJDK 8 distribution from the Eclipse Adoptium project." + }, + { + "name": "Eclipse Temurin JRE 11", + "slug": "eclipse-temurin-jre-11/windows", + "platform": "windows", + "unique_identifier": "Eclipse Temurin JRE with Hotspot", + "description": "Eclipse Temurin JRE 11 is the free, open-source OpenJDK 11 Java runtime from the Eclipse Adoptium project." + }, + { + "name": "Eclipse Temurin JRE 17", + "slug": "eclipse-temurin-jre-17/windows", + "platform": "windows", + "unique_identifier": "Eclipse Temurin JRE with Hotspot", + "description": "Eclipse Temurin JRE 17 is the free, open-source OpenJDK 17 Java runtime from the Eclipse Adoptium project." + }, + { + "name": "Eclipse Temurin JRE 21", + "slug": "eclipse-temurin-jre-21/windows", + "platform": "windows", + "unique_identifier": "Eclipse Temurin JRE with Hotspot", + "description": "Eclipse Temurin JRE 21 is the free, open-source OpenJDK 21 Java runtime from the Eclipse Adoptium project." + }, + { + "name": "Eclipse Temurin JRE 8", + "slug": "eclipse-temurin-jre-8/windows", + "platform": "windows", + "unique_identifier": "Eclipse Temurin JRE with Hotspot", + "description": "Eclipse Temurin JRE 8 is the free, open-source OpenJDK 8 Java runtime from the Eclipse Adoptium project." + }, + { + "name": "Egnyte WebEdit", + "slug": "egnyte-webedit/windows", + "platform": "windows", + "unique_identifier": "Egnyte WebEdit", + "description": "Egnyte WebEdit opens files from the Egnyte web UI directly in their native desktop applications." + }, { "name": "Egnyte", "slug": "egnyte/darwin", @@ -2878,6 +2941,13 @@ "unique_identifier": "com.kamban.elephas", "description": "Elephas is a personal AI Writing Assistant." }, + { + "name": "Elevate UC", + "slug": "elevate-uc/windows", + "platform": "windows", + "unique_identifier": "Elevate UC", + "description": "Elevate UC is an Intermedia unified-communications client for calling, messaging, and meetings." + }, { "name": "Elgato Camera Hub", "slug": "elgato-camera-hub/darwin", @@ -2955,6 +3025,13 @@ "unique_identifier": "eM Client", "description": "eM Client is an email client." }, + { + "name": "EndNote", + "slug": "endnote/windows", + "platform": "windows", + "unique_identifier": "EndNote 2025", + "description": "EndNote is a reference manager for organizing citations and formatting bibliographies." + }, { "name": "Enpass", "slug": "enpass/darwin", @@ -2962,6 +3039,13 @@ "unique_identifier": "in.sinew.Enpass-Desktop", "description": "Enpass is a password and credentials manager." }, + { + "name": "Enpass", + "slug": "enpass/windows", + "platform": "windows", + "unique_identifier": "Enpass", + "description": "Enpass is an offline password manager that stores credentials in a local, master-password-protected vault." + }, { "name": "Ente Auth", "slug": "ente-auth/darwin", @@ -3004,6 +3088,13 @@ "unique_identifier": "com.evernote.Evernote", "description": "Evernote is an app for note taking, organising, task lists, and archiving." }, + { + "name": "Evernote", + "slug": "evernote/windows", + "platform": "windows", + "unique_identifier": "Evernote", + "description": "Evernote is a note-taking app for capturing notes, tasks, and schedules in one place." + }, { "name": "ExifCleaner", "slug": "exifcleaner/darwin", diff --git a/ee/maintained-apps/outputs/eclipse-temurin-jdk-11/windows.json b/ee/maintained-apps/outputs/eclipse-temurin-jdk-11/windows.json new file mode 100644 index 00000000000..79b2ded9b99 --- /dev/null +++ b/ee/maintained-apps/outputs/eclipse-temurin-jdk-11/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "11.0.31.11", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '11.%';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '11.%' AND version_compare(version, '11.0.31.11') < 0);" + }, + "installer_url": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.31+11/OpenJDK11U-jdk_x64_windows_hotspot_11.0.31_11.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "1a3513d1", + "sha256": "432d897f39766288a5747ec5f4927136ce89b743df2ab436cf7d230fbbcd596a", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{22022AB8-C6D7-EF20-3444-3FDF9543E00A}" + } + ], + "refs": { + "1a3513d1": "# 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('{22022AB8-C6D7-EF20-3444-3FDF9543E00A}')) {\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/eclipse-temurin-jdk-17/windows.json b/ee/maintained-apps/outputs/eclipse-temurin-jdk-17/windows.json new file mode 100644 index 00000000000..d770ad65407 --- /dev/null +++ b/ee/maintained-apps/outputs/eclipse-temurin-jdk-17/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "17.0.19.10", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '17.%';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '17.%' AND version_compare(version, '17.0.19.10') < 0);" + }, + "installer_url": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.19+10/OpenJDK17U-jdk_x64_windows_hotspot_17.0.19_10.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "a8451a5d", + "sha256": "ccd97a7e313381a84e3567ffe10ad562884e399cc1fb1b4c5fa417de49efac78", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{3385E798-4714-23E5-45F0-9C71471240FA}" + } + ], + "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", + "a8451a5d": "# 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('{3385E798-4714-23E5-45F0-9C71471240FA}')) {\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/eclipse-temurin-jdk-21/windows.json b/ee/maintained-apps/outputs/eclipse-temurin-jdk-21/windows.json new file mode 100644 index 00000000000..93fd33126a4 --- /dev/null +++ b/ee/maintained-apps/outputs/eclipse-temurin-jdk-21/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "21.0.11.10", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '21.%';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '21.%' AND version_compare(version, '21.0.11.10') < 0);" + }, + "installer_url": "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.11+10/OpenJDK21U-jdk_x64_windows_hotspot_21.0.11_10.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "348786d4", + "sha256": "93a9c20f4ce967d78992edc5e6fdcc250a56019080553d5d20846decb51d9c01", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{C7371D5C-29EB-0885-C0E4-F8E3B955271F}" + } + ], + "refs": { + "348786d4": "# 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('{C7371D5C-29EB-0885-C0E4-F8E3B955271F}')) {\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/eclipse-temurin-jdk-8/windows.json b/ee/maintained-apps/outputs/eclipse-temurin-jdk-8/windows.json new file mode 100644 index 00000000000..67c1a1333cf --- /dev/null +++ b/ee/maintained-apps/outputs/eclipse-temurin-jdk-8/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "8.0.492.9", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '8.%';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JDK%' AND publisher = 'Eclipse Adoptium' AND version LIKE '8.%' AND version_compare(version, '8.0.492.9') < 0);" + }, + "installer_url": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u492-b09/OpenJDK8U-jdk_x64_windows_hotspot_8u492b09.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "fb42ab0d", + "sha256": "e931546f0557e0735472e99c5f0a62d34854ab8a2fee9709bfcbc7ea6dcc5172", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{44F3A265-BA82-D55E-A5CC-B578449EE543}" + } + ], + "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", + "fb42ab0d": "# 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('{44F3A265-BA82-D55E-A5CC-B578449EE543}')) {\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/eclipse-temurin-jre-11/windows.json b/ee/maintained-apps/outputs/eclipse-temurin-jre-11/windows.json new file mode 100644 index 00000000000..54a92205fb2 --- /dev/null +++ b/ee/maintained-apps/outputs/eclipse-temurin-jre-11/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "11.0.31.11", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '11.%';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '11.%' AND version_compare(version, '11.0.31.11') < 0);" + }, + "installer_url": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.31+11/OpenJDK11U-jre_x64_windows_hotspot_11.0.31_11.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "85520ca4", + "sha256": "a047f90b4520cbd53cc74647aff1f23844299e85e3c469159735801e097208ff", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{CDB73A5C-7692-6FA6-BDAE-E46B39B3A3BB}" + } + ], + "refs": { + "85520ca4": "# 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('{CDB73A5C-7692-6FA6-BDAE-E46B39B3A3BB}')) {\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/eclipse-temurin-jre-17/windows.json b/ee/maintained-apps/outputs/eclipse-temurin-jre-17/windows.json new file mode 100644 index 00000000000..b5b6e94b83a --- /dev/null +++ b/ee/maintained-apps/outputs/eclipse-temurin-jre-17/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "17.0.19.10", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '17.%';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '17.%' AND version_compare(version, '17.0.19.10') < 0);" + }, + "installer_url": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.19+10/OpenJDK17U-jre_x64_windows_hotspot_17.0.19_10.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "98e1299b", + "sha256": "ead2ed434bee9493b08ba68c8778775e18fa050bb9a8a2ae72498e4efb75e95f", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{CB6898A1-65E8-8AD8-043F-DD72DB076C1D}" + } + ], + "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", + "98e1299b": "# 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('{CB6898A1-65E8-8AD8-043F-DD72DB076C1D}')) {\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/eclipse-temurin-jre-21/windows.json b/ee/maintained-apps/outputs/eclipse-temurin-jre-21/windows.json new file mode 100644 index 00000000000..d535a887293 --- /dev/null +++ b/ee/maintained-apps/outputs/eclipse-temurin-jre-21/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "21.0.11.10", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '21.%';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '21.%' AND version_compare(version, '21.0.11.10') < 0);" + }, + "installer_url": "https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.11+10/OpenJDK21U-jre_x64_windows_hotspot_21.0.11_10.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "d0d67fb5", + "sha256": "570b2b7f4d39638afe416e14285e08f27fd14995e0716dcbc07f936a5b91868a", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{E1ED1384-86C6-6900-91B2-CBA0DB8D3E2E}" + } + ], + "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", + "d0d67fb5": "# 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('{E1ED1384-86C6-6900-91B2-CBA0DB8D3E2E}')) {\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/eclipse-temurin-jre-8/windows.json b/ee/maintained-apps/outputs/eclipse-temurin-jre-8/windows.json new file mode 100644 index 00000000000..cb71b127edd --- /dev/null +++ b/ee/maintained-apps/outputs/eclipse-temurin-jre-8/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "8.0.492.9", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '8.%';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Eclipse Temurin JRE%' AND publisher = 'Eclipse Adoptium' AND version LIKE '8.%' AND version_compare(version, '8.0.492.9') < 0);" + }, + "installer_url": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u492-b09/OpenJDK8U-jre_x64_windows_hotspot_8u492b09.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "24e08f0a", + "sha256": "b606dcaef8d8896be34e18dbd536437b03761411c7b0a992bcdd6c0962a53edc", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{740C8620-C719-E140-1A76-A4513367112A}" + } + ], + "refs": { + "24e08f0a": "# 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('{740C8620-C719-E140-1A76-A4513367112A}')) {\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/egnyte-webedit/windows.json b/ee/maintained-apps/outputs/egnyte-webedit/windows.json new file mode 100644 index 00000000000..8f62b905b37 --- /dev/null +++ b/ee/maintained-apps/outputs/egnyte-webedit/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "2.4.1400.90", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Egnyte WebEdit' AND publisher = 'Egnyte, Inc';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Egnyte WebEdit' AND publisher = 'Egnyte, Inc' AND version_compare(version, '2.4.1400.90') < 0);" + }, + "installer_url": "https://egnyte-cdn.egnyte.com/webedit/win/en-us/2.4.14/EgnyteWebEdit_2.4.14_90.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "7b6b3047", + "sha256": "fba7426c6cc2ec600a62c351db2685e9408568ec343092f78e41232384e813e0", + "default_categories": [ + "Productivity" + ], + "upgrade_code": "{C2023CA3-51EF-4605-BA05-D2A63B5D7312}" + } + ], + "refs": { + "7b6b3047": "# 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('{C2023CA3-51EF-4605-BA05-D2A63B5D7312}')) {\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/elevate-uc/windows.json b/ee/maintained-apps/outputs/elevate-uc/windows.json new file mode 100644 index 00000000000..a74d2cffc64 --- /dev/null +++ b/ee/maintained-apps/outputs/elevate-uc/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "2.31.37", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Elevate UC' AND publisher = 'Serverdata.net, Inc.';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Elevate UC' AND publisher = 'Serverdata.net, Inc.' AND version_compare(version, '2.31.37') < 0);" + }, + "installer_url": "https://cp.serverdata.net/voice/pbx/softphonereleases/default/latest-win/elevate-uc-x64.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "65159f92", + "sha256": "no_check", + "default_categories": [ + "Communication" + ], + "upgrade_code": "{B7411227-AA11-4234-A03F-88494D4F714D}" + } + ], + "refs": { + "65159f92": "# 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('{B7411227-AA11-4234-A03F-88494D4F714D}')) {\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/endnote/windows.json b/ee/maintained-apps/outputs/endnote/windows.json new file mode 100644 index 00000000000..ed22552ba3c --- /dev/null +++ b/ee/maintained-apps/outputs/endnote/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "22.3.1.19926", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'EndNote 20%' AND publisher = 'Clarivate Analytics';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'EndNote 20%' AND publisher = 'Clarivate Analytics' AND version_compare(version, '22.3.1.19926') < 0);" + }, + "installer_url": "https://download.endnote.com/downloads/2025/EN2025Inst.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "a5b016cf", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ], + "upgrade_code": "{6E1EBAA8-659E-4630-BABB-727E486DF669}" + } + ], + "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", + "a5b016cf": "# 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('{6E1EBAA8-659E-4630-BABB-727E486DF669}')) {\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/enpass/windows.json b/ee/maintained-apps/outputs/enpass/windows.json new file mode 100644 index 00000000000..097fcde46ac --- /dev/null +++ b/ee/maintained-apps/outputs/enpass/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "6.12.2.2551", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Enpass' AND publisher = 'Enpass Technologies Inc.';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Enpass' AND publisher = 'Enpass Technologies Inc.' AND version_compare(version, '6.12.2.2551') < 0);" + }, + "installer_url": "https://dl.enpass.io/stable/windows/setup/x64/6.12.2.2551/Enpass-setup.exe", + "install_script_ref": "e75b1371", + "uninstall_script_ref": "e6219b05", + "sha256": "a5a6355adf8be80ef2fe43ae10527e9354b7f6c18a3485dc30013444ac06fbda", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "e6219b05": "# Uninstalls Enpass.\n#\n# Enpass is a WiX \"burn\" bundle. The visible ARP entry is the bundle\n# (DisplayName \"Enpass\"); its QuietUninstallString runs the cached\n# Enpass-setup.exe with /uninstall /quiet. The inner MSI is ARPSYSTEMCOMPONENT\n# (hidden). RestartManager closes the running Enpass tray app during uninstall. Prefer the bundle\n# entry (an .exe UninstallString, uninstalls the whole chain with\n# /uninstall /quiet /norestart); fall back to the chained MSI entry\n# (msiexec /X{ProductCode}) if only that one is present.\n\n$softwareName = \"Enpass\"\n\n$machineKey = 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n$machineKey32on64 = 'HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n\nfunction Split-UninstallString {\n param([string]$raw)\n # Parse into executable + args, handling quoted/unquoted/bare shapes.\n if ($raw -match '^\\s*\"([^\"]+)\"\\s*(.*)$') {\n return @($matches[1], $matches[2].Trim())\n } elseif ($raw -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') {\n return @($matches[1], $matches[2].Trim())\n }\n return @($raw, \"\")\n}\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 }\n\n[array]$matches_ = $uninstallKeys | Where-Object { $_.DisplayName -eq $softwareName }\n\n# Prefer the burn bundle entry (non-msiexec .exe uninstaller) over the chained MSI.\n$bundle = $matches_ | Where-Object {\n $raw = if ($_.QuietUninstallString) { $_.QuietUninstallString } else { $_.UninstallString }\n $raw -and $raw -notmatch '(?i)msiexec'\n} | Select-Object -First 1\n$entry = if ($bundle) { $bundle } else { $matches_ | Select-Object -First 1 }\n\nif ($entry) {\n $raw = if ($entry.QuietUninstallString) { $entry.QuietUninstallString } else { $entry.UninstallString }\n $exe, $exeArgs = Split-UninstallString -raw $raw\n\n if ($exe -match '(?i)msiexec') {\n if ($exeArgs -notmatch '(?i)/(x|uninstall)') { $exeArgs = \"/X $exeArgs\" }\n if ($exeArgs -notmatch '(?i)/(qn|quiet)') { $exeArgs = \"$exeArgs /qn\" }\n if ($exeArgs -notmatch '(?i)/norestart') { $exeArgs = \"$exeArgs /norestart\" }\n } else {\n if ($exeArgs -notmatch '/uninstall') { $exeArgs = \"/uninstall $exeArgs\" }\n if ($exeArgs -notmatch '/quiet') { $exeArgs = \"$exeArgs /quiet\" }\n if ($exeArgs -notmatch '/norestart') { $exeArgs = \"$exeArgs /norestart\" }\n }\n $exeArgs = $exeArgs.Trim()\n\n Write-Host \"Uninstall command: $exe\"\n Write-Host \"Uninstall args: $exeArgs\"\n $process = Start-Process -FilePath $exe -ArgumentList $exeArgs -NoNewWindow -PassThru -Wait\n $exitCode = $process.ExitCode\n}\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n\nif ($null -eq $exitCode) {\n Write-Host \"Uninstall entry not found for '$softwareName'.\"\n Exit 1\n}\n\nWrite-Host \"Uninstall exit code: $exitCode\"\n# 0 = success, 3010 = success but reboot required, 1641 = reboot initiated\nif ($exitCode -eq 3010 -or $exitCode -eq 1641) { Exit 0 }\nExit $exitCode\n", + "e75b1371": "# Learn more about .exe install scripts:\n# http://fleetdm.com/learn-more-about/exe-install-scripts\n#\n# Enpass ships as a WiX \"burn\" bootstrapper that chains vcredist + the inner\n# Enpass MSI and registers a per-machine bundle ARP entry. Silent switches\n# follow the burn convention.\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 = \"/install /quiet /norestart\"\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\n # 0 = success, 3010 = success but reboot required, 1641 = reboot initiated\n if ($exitCode -eq 3010 -or $exitCode -eq 1641) {\n Exit 0\n }\n\n Exit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n" + } +} diff --git a/ee/maintained-apps/outputs/evernote/windows.json b/ee/maintained-apps/outputs/evernote/windows.json new file mode 100644 index 00000000000..a886b3a2b42 --- /dev/null +++ b/ee/maintained-apps/outputs/evernote/windows.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "11.24.3", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name LIKE 'Evernote%' AND publisher = 'Evernote Corporation';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Evernote%' AND publisher = 'Evernote Corporation' AND version_compare(version, '11.24.3') < 0);" + }, + "installer_url": "https://win.desktop.evernote.com/builds/Evernote-11.24.3-win-ddl-stage-20260706102001-4d1c69555043cbd5d20be3e734a462e4281e40dd-setup.exe", + "install_script_ref": "5820d576", + "uninstall_script_ref": "d4142835", + "sha256": "6d6307deec55f8bbf1d7cbc7228dc556295008a3d13b59a2a90e4981abe0567d", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "5820d576": "# Learn more about .exe install scripts:\n# http://fleetdm.com/learn-more-about/exe-install-scripts\n\n$exeFilePath = \"${env:INSTALLER_PATH}\"\n\ntry {\n\n# Evernote uses an electron-builder NSIS installer. It defaults to a per-user\n# install, so /allusers is required for a machine-wide install alongside the\n# NSIS /S silent flag.\n$processOptions = @{\n FilePath = \"$exeFilePath\"\n ArgumentList = \"/allusers /S\"\n PassThru = $true\n Wait = $true\n}\n\n# Start process and track exit code\n$process = Start-Process @processOptions\n$exitCode = $process.ExitCode\n\n# Prints the exit code\nWrite-Host \"Install exit code: $exitCode\"\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n", + "d4142835": "# Fleet extracts name from installer (EXE) and saves it to PACKAGE_ID\n# variable\n# Evernote (electron-builder NSIS) registers a versioned DisplayName in HKLM\n# when installed with /allusers, e.g. \"Evernote 11.24.3 (All Users)\". The\n# \"(All Users)\" suffix is locale-dependent, so match on the \"Evernote\" prefix\n# only. Its QuietUninstallString runs \"Uninstall Evernote.exe\" /allusers /S,\n# which also closes the running tray app.\n$softwareName = \"Evernote\"\n\n$softwareNameLike = \"Evernote*\"\n\n# electron-builder NSIS uninstaller; /allusers matches the machine-wide install\n$uninstallArgs = \"/allusers /S\"\n\n$machineKey = `\n 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n$machineKey32on64 = `\n 'HKLM:\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*'\n\n$exitCode = 0\n\ntry {\n\n[array]$uninstallKeys = Get-ChildItem `\n -Path @($machineKey, $machineKey32on64) `\n -ErrorAction SilentlyContinue |\n ForEach-Object { Get-ItemProperty $_.PSPath }\n\n$foundUninstaller = $false\nforeach ($key in $uninstallKeys) {\n if ($key.DisplayName -like $softwareNameLike) {\n $foundUninstaller = $true\n # Get the uninstall command. Some uninstallers do not include\n # 'QuietUninstallString' and require a flag to run silently.\n $uninstallCommand = if ($key.QuietUninstallString) {\n $key.QuietUninstallString\n } else {\n $key.UninstallString\n }\n\n # The uninstall command may contain command and args, like:\n # \"C:\\Program Files\\Software\\uninstall.exe\" /SILENT\n # Split the command and args\n $splitArgs = $uninstallCommand.Split('\"')\n if ($splitArgs.Length -gt 1) {\n if ($splitArgs.Length -eq 3) {\n $uninstallArgs = \"$( $splitArgs[2] ) $uninstallArgs\".Trim()\n } elseif ($splitArgs.Length -gt 3) {\n Throw `\n \"Uninstall command contains multiple quoted strings. \" +\n \"Please update the uninstall script.`n\" +\n \"Uninstall command: $uninstallCommand\"\n }\n $uninstallCommand = $splitArgs[1]\n }\n Write-Host \"Uninstall command: $uninstallCommand\"\n Write-Host \"Uninstall args: $uninstallArgs\"\n\n $processOptions = @{\n FilePath = $uninstallCommand\n PassThru = $true\n Wait = $true\n }\n if ($uninstallArgs -ne '') {\n $processOptions.ArgumentList = \"$uninstallArgs\"\n }\n\n # Start process and track exit code\n $process = Start-Process @processOptions\n $exitCode = $process.ExitCode\n\n # Prints the exit code\n Write-Host \"Uninstall exit code: $exitCode\"\n # Exit the loop once the software is found and uninstalled.\n break\n }\n}\n\nif (-not $foundUninstaller) {\n Write-Host \"Uninstaller for '$softwareName' not found.\"\n # Change exit code to 0 if you don't want to fail if uninstaller is not\n # found. This could happen if program was already uninstalled.\n $exitCode = 1\n}\n\n} catch {\n Write-Host \"Error: $_\"\n $exitCode = 1\n}\n\nExit $exitCode\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk11.tsx b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk11.tsx new file mode 100644 index 00000000000..333bc768a5b --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk11.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const EclipseTemurinJdk11 = (props: SVGProps) => ( + + + +); +export default EclipseTemurinJdk11; diff --git a/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk17.tsx b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk17.tsx new file mode 100644 index 00000000000..93a89b1e80c --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk17.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const EclipseTemurinJdk17 = (props: SVGProps) => ( + + + +); +export default EclipseTemurinJdk17; diff --git a/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk21.tsx b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk21.tsx new file mode 100644 index 00000000000..4adc1836a4c --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk21.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const EclipseTemurinJdk21 = (props: SVGProps) => ( + + + +); +export default EclipseTemurinJdk21; diff --git a/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk8.tsx b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk8.tsx new file mode 100644 index 00000000000..82a91c49380 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJdk8.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const EclipseTemurinJdk8 = (props: SVGProps) => ( + + + +); +export default EclipseTemurinJdk8; diff --git a/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre11.tsx b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre11.tsx new file mode 100644 index 00000000000..8d3f06eb9ca --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre11.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const EclipseTemurinJre11 = (props: SVGProps) => ( + + + +); +export default EclipseTemurinJre11; diff --git a/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre17.tsx b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre17.tsx new file mode 100644 index 00000000000..ab181584430 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre17.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const EclipseTemurinJre17 = (props: SVGProps) => ( + + + +); +export default EclipseTemurinJre17; diff --git a/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre21.tsx b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre21.tsx new file mode 100644 index 00000000000..715ae548d24 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre21.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const EclipseTemurinJre21 = (props: SVGProps) => ( + + + +); +export default EclipseTemurinJre21; diff --git a/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre8.tsx b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre8.tsx new file mode 100644 index 00000000000..ddbead58028 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/EclipseTemurinJre8.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const EclipseTemurinJre8 = (props: SVGProps) => ( + + + +); +export default EclipseTemurinJre8; diff --git a/frontend/pages/SoftwarePage/components/icons/EgnyteWebedit.tsx b/frontend/pages/SoftwarePage/components/icons/EgnyteWebedit.tsx new file mode 100644 index 00000000000..6d52c5d7dd6 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/EgnyteWebedit.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const EgnyteWebedit = (props: SVGProps) => ( + + + +); +export default EgnyteWebedit; diff --git a/frontend/pages/SoftwarePage/components/icons/ElevateUc.tsx b/frontend/pages/SoftwarePage/components/icons/ElevateUc.tsx new file mode 100644 index 00000000000..fa57c31eeb1 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/ElevateUc.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const ElevateUc = (props: SVGProps) => ( + + + +); +export default ElevateUc; diff --git a/frontend/pages/SoftwarePage/components/icons/Endnote.tsx b/frontend/pages/SoftwarePage/components/icons/Endnote.tsx new file mode 100644 index 00000000000..74e47770fa1 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Endnote.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Endnote = (props: SVGProps) => ( + + + +); +export default Endnote; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index ea9ded9618c..138b1ff59de 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -324,13 +324,23 @@ import Eaglefiler from "./Eaglefiler"; import Easydict from "./Easydict"; import Easyfind from "./Easyfind"; import Eclipse from "./Eclipse"; +import EclipseTemurinJdk11 from "./EclipseTemurinJdk11"; +import EclipseTemurinJdk17 from "./EclipseTemurinJdk17"; +import EclipseTemurinJdk21 from "./EclipseTemurinJdk21"; +import EclipseTemurinJdk8 from "./EclipseTemurinJdk8"; +import EclipseTemurinJre11 from "./EclipseTemurinJre11"; +import EclipseTemurinJre17 from "./EclipseTemurinJre17"; +import EclipseTemurinJre21 from "./EclipseTemurinJre21"; +import EclipseTemurinJre8 from "./EclipseTemurinJre8"; import Edge from "./Edge"; import Egnyte from "./Egnyte"; +import EgnyteWebedit from "./EgnyteWebedit"; import EightXEightWork from "./8X8Work"; import Electronmail from "./Electronmail"; import Electrum from "./Electrum"; import Element from "./Element"; import Elephas from "./Elephas"; +import ElevateUc from "./ElevateUc"; import ElgatoCameraHub from "./ElgatoCameraHub"; import ElgatoCaptureDeviceUtility from "./ElgatoCaptureDeviceUtility"; import ElgatoControlCenter from "./ElgatoControlCenter"; @@ -339,6 +349,7 @@ import ElgatoStreamDeck from "./ElgatoStreamDeck"; import ElgatoWaveLink from "./ElgatoWaveLink"; import ElmediaPlayer from "./ElmediaPlayer"; import Emclient from "./Emclient"; +import Endnote from "./Endnote"; import Enpass from "./Enpass"; import EnteAuth from "./EnteAuth"; import EpicGames from "./EpicGames"; @@ -1420,13 +1431,23 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { easyfind: Easyfind, eclipse: Eclipse, "eclipse memory analyzer": Memoryanalyzer, + "eclipse temurin jdk 11": EclipseTemurinJdk11, + "eclipse temurin jdk 17": EclipseTemurinJdk17, + "eclipse temurin jdk 21": EclipseTemurinJdk21, + "eclipse temurin jdk 8": EclipseTemurinJdk8, + "eclipse temurin jre 11": EclipseTemurinJre11, + "eclipse temurin jre 17": EclipseTemurinJre17, + "eclipse temurin jre 21": EclipseTemurinJre21, + "eclipse temurin jre 8": EclipseTemurinJre8, edge: MicrosoftEdge, edrawmax: WondershareEdrawmax, egnyte: Egnyte, + "egnyte webedit": EgnyteWebedit, electronmail: Electronmail, electrum: Electrum, element: Element, elephas: Elephas, + "elevate uc": ElevateUc, "elgato camera hub": ElgatoCameraHub, "elgato capture device utility": ElgatoCaptureDeviceUtility, "elgato control center": ElgatoControlCenter, @@ -1436,6 +1457,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "elmedia player": ElmediaPlayer, "eltima cloudmounter": Cloudmounter, "em client": Emclient, + endnote: Endnote, enpass: Enpass, "ente auth": EnteAuth, "epic games launcher": EpicGames, diff --git a/website/assets/images/app-icon-eclipse-temurin-jdk-11-60x60@2x.png b/website/assets/images/app-icon-eclipse-temurin-jdk-11-60x60@2x.png new file mode 100644 index 00000000000..f616d348920 Binary files /dev/null and b/website/assets/images/app-icon-eclipse-temurin-jdk-11-60x60@2x.png differ diff --git a/website/assets/images/app-icon-eclipse-temurin-jdk-17-60x60@2x.png b/website/assets/images/app-icon-eclipse-temurin-jdk-17-60x60@2x.png new file mode 100644 index 00000000000..f616d348920 Binary files /dev/null and b/website/assets/images/app-icon-eclipse-temurin-jdk-17-60x60@2x.png differ diff --git a/website/assets/images/app-icon-eclipse-temurin-jdk-21-60x60@2x.png b/website/assets/images/app-icon-eclipse-temurin-jdk-21-60x60@2x.png new file mode 100644 index 00000000000..f616d348920 Binary files /dev/null and b/website/assets/images/app-icon-eclipse-temurin-jdk-21-60x60@2x.png differ diff --git a/website/assets/images/app-icon-eclipse-temurin-jdk-8-60x60@2x.png b/website/assets/images/app-icon-eclipse-temurin-jdk-8-60x60@2x.png new file mode 100644 index 00000000000..f616d348920 Binary files /dev/null and b/website/assets/images/app-icon-eclipse-temurin-jdk-8-60x60@2x.png differ diff --git a/website/assets/images/app-icon-eclipse-temurin-jre-11-60x60@2x.png b/website/assets/images/app-icon-eclipse-temurin-jre-11-60x60@2x.png new file mode 100644 index 00000000000..f616d348920 Binary files /dev/null and b/website/assets/images/app-icon-eclipse-temurin-jre-11-60x60@2x.png differ diff --git a/website/assets/images/app-icon-eclipse-temurin-jre-17-60x60@2x.png b/website/assets/images/app-icon-eclipse-temurin-jre-17-60x60@2x.png new file mode 100644 index 00000000000..f616d348920 Binary files /dev/null and b/website/assets/images/app-icon-eclipse-temurin-jre-17-60x60@2x.png differ diff --git a/website/assets/images/app-icon-eclipse-temurin-jre-21-60x60@2x.png b/website/assets/images/app-icon-eclipse-temurin-jre-21-60x60@2x.png new file mode 100644 index 00000000000..f616d348920 Binary files /dev/null and b/website/assets/images/app-icon-eclipse-temurin-jre-21-60x60@2x.png differ diff --git a/website/assets/images/app-icon-eclipse-temurin-jre-8-60x60@2x.png b/website/assets/images/app-icon-eclipse-temurin-jre-8-60x60@2x.png new file mode 100644 index 00000000000..f616d348920 Binary files /dev/null and b/website/assets/images/app-icon-eclipse-temurin-jre-8-60x60@2x.png differ diff --git a/website/assets/images/app-icon-egnyte-webedit-60x60@2x.png b/website/assets/images/app-icon-egnyte-webedit-60x60@2x.png new file mode 100644 index 00000000000..69d5658050f Binary files /dev/null and b/website/assets/images/app-icon-egnyte-webedit-60x60@2x.png differ diff --git a/website/assets/images/app-icon-elevate-uc-60x60@2x.png b/website/assets/images/app-icon-elevate-uc-60x60@2x.png new file mode 100644 index 00000000000..ff3aee4935b Binary files /dev/null and b/website/assets/images/app-icon-elevate-uc-60x60@2x.png differ diff --git a/website/assets/images/app-icon-endnote-60x60@2x.png b/website/assets/images/app-icon-endnote-60x60@2x.png new file mode 100644 index 00000000000..0195d5a7983 Binary files /dev/null and b/website/assets/images/app-icon-endnote-60x60@2x.png differ