From cf4d869906c8bff3f56b3dac1a83f1886c4e0a79 Mon Sep 17 00:00:00 2001 From: Harrison Ravazzolo <38767391+harrisonravazzolo@users.noreply.github.com> Date: Fri, 29 May 2026 14:59:04 -0700 Subject: [PATCH] FMA - Chrome remote desktop (#46484) ## Summary by CodeRabbit * **New Features** * Chrome Remote Desktop is now supported on Windows with integrated package management. Users can discover, install, and manage the application directly through the platform with full tracking and automatic update capabilities. The application includes proper UI branding and Windows installation integration. [![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/46484?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) --------- Co-authored-by: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> --- .../inputs/winget/chrome-remote-desktop.json | 10 ++++++++ ee/maintained-apps/outputs/apps.json | 7 ++++++ .../chrome-remote-desktop/windows.json | 23 ++++++++++++++++++ .../components/icons/ChromeRemoteDesktop.tsx | 14 +++++++++++ .../SoftwarePage/components/icons/index.ts | 2 ++ ...pp-icon-chrome-remote-desktop-60x60@2x.png | Bin 0 -> 7660 bytes 6 files changed, 56 insertions(+) create mode 100644 ee/maintained-apps/inputs/winget/chrome-remote-desktop.json create mode 100644 ee/maintained-apps/outputs/chrome-remote-desktop/windows.json create mode 100644 frontend/pages/SoftwarePage/components/icons/ChromeRemoteDesktop.tsx create mode 100644 website/assets/images/app-icon-chrome-remote-desktop-60x60@2x.png diff --git a/ee/maintained-apps/inputs/winget/chrome-remote-desktop.json b/ee/maintained-apps/inputs/winget/chrome-remote-desktop.json new file mode 100644 index 0000000000..a76851c5de --- /dev/null +++ b/ee/maintained-apps/inputs/winget/chrome-remote-desktop.json @@ -0,0 +1,10 @@ +{ + "name": "Chrome Remote Desktop", + "slug": "chrome-remote-desktop/windows", + "package_identifier": "Google.ChromeRemoteDesktopHost", + "unique_identifier": "Chrome Remote Desktop Host", + "installer_arch": "x86", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index cbf027e8dd..488b8bf799 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -477,6 +477,13 @@ "unique_identifier": "com.openai.chat", "description": "ChatGPT Desktop is OpenAI's official ChatGPT desktop app for macOS, providing seamless access to AI-powered conversations and assistance." }, + { + "name": "Chrome Remote Desktop", + "slug": "chrome-remote-desktop/windows", + "platform": "windows", + "unique_identifier": "Chrome Remote Desktop Host", + "description": "Chrome Remote Desktop is an app that allows admins to help troubleshoot through the Google Chrome browser." + }, { "name": "Cisco Jabber", "slug": "cisco-jabber/darwin", diff --git a/ee/maintained-apps/outputs/chrome-remote-desktop/windows.json b/ee/maintained-apps/outputs/chrome-remote-desktop/windows.json new file mode 100644 index 0000000000..6739605562 --- /dev/null +++ b/ee/maintained-apps/outputs/chrome-remote-desktop/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "148.0.7778.23", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'Chrome Remote Desktop Host' AND publisher = 'Google LLC';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Chrome Remote Desktop Host' AND publisher = 'Google LLC' AND version_compare(version, '148.0.7778.23') < 0);" + }, + "installer_url": "https://dl.google.com/release2/misc/acrsfvl3wyga6uijvhfjjoxbji3a_148.0.7778.23/remoting-host.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "44518c74", + "sha256": "9ff875846f3fc5889f195d7b523e6fb6d4c2a0ecfbac9551284d95c62a9342f7", + "default_categories": [ + "Productivity" + ], + "upgrade_code": "{2B21F767-E157-4FA6-963C-55834C1433A6}" + } + ], + "refs": { + "44518c74": "# 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\nforeach ($product_code in $inst.RelatedProducts('{2B21F767-E157-4FA6-963C-55834C1433A6}')) {\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 ($process.ExitCode -ne 0) {\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/ChromeRemoteDesktop.tsx b/frontend/pages/SoftwarePage/components/icons/ChromeRemoteDesktop.tsx new file mode 100644 index 0000000000..c0e7166acd --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/ChromeRemoteDesktop.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const ChromeRemoteDesktop = (props: SVGProps) => ( + + + +); +export default ChromeRemoteDesktop; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index 6d28cfcba5..8aa968c7b2 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -14,6 +14,7 @@ import Bluej from "./Bluej"; import BurpSuiteCommunity from "./BurpSuiteCommunity"; import Cavalry from "./Cavalry"; import Charles from "./Charles"; +import ChromeRemoteDesktop from "./ChromeRemoteDesktop"; import ConnectFonts from "./ConnectFonts"; import CrashPlan from "./CrashPlan"; import DruvaInSync from "./DruvaInSync"; @@ -332,6 +333,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { charles: Charles, "chatgpt atlas": ChatGptAtlas, chatgpt: ChatGpt, + "chrome remote desktop": ChromeRemoteDesktop, "cisco jabber": CiscoJabber, "citrix workspace": CitrixWorkspace, claude: Claude, diff --git a/website/assets/images/app-icon-chrome-remote-desktop-60x60@2x.png b/website/assets/images/app-icon-chrome-remote-desktop-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3776b089c8e1b9b0f838e4556e677dee814aa9ce GIT binary patch literal 7660 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 ZkiV~w=(z;bn*67