Chrome is on roughly 70% of Windows desktops. If you're scripting machine setup, the silent install is mandatory — Chrome's installer otherwise pops a "Welcome to Chrome" tab on first run and tries to set itself as default. Here's how to do it cleanly with winget.
TL;DR
Open Terminal as Administrator:
winget install --id Google.Chrome -e --silent --accept-package-agreements --accept-source-agreements
Chrome installs to C:\Program Files\Google\Chrome system-wide. ~15 seconds. No welcome tab, no default-browser nag.
What gets installed
| Field | Value |
|---|---|
| Package ID | Google.Chrome |
| Publisher | Google LLC |
| Installer type | WiX bootstrapper |
| License | Freeware (proprietary) |
| Latest version | 148.0.7778.179 |
| Homepage | google.com/chrome |
| Default install path | C:\Program Files\Google\Chrome |
Chrome's installer is actually a WiX bootstrapper that pulls down an MSI. winget handles the bootstrapper handshake for you — you don't need to know the difference.
Stop Chrome from auto-launching after install
Chrome's installer opens a new browser window on completion by default. The --silent flag suppresses this. If you're still seeing the popup, force the WiX-level silent flag:
winget install --id Google.Chrome -e --override "/silent /install"
Chrome Beta / Dev / Canary
Google ships parallel release channels. Install side-by-side:
winget install --id Google.Chrome.Beta -e --silent
winget install --id Google.Chrome.Dev -e --silent
winget install --id Google.Chrome.Canary -e --silent
Canary is especially useful for QA — it updates daily and runs in its own profile.
Disable Chrome auto-updates (enterprise)
Chrome's GoogleUpdate.exe runs in the background and updates Chrome whether you want it to or not. For frozen enterprise deployments, disable it:
# Disable Chrome auto-update via registry
New-Item -Path "HKLM:\SOFTWARE\Policies\Google\Update" -Force | Out-Null
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Google\Update" -Name "UpdateDefault" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Google\Update" -Name "Update{8A69D345-D564-463C-AFF1-A69D9E530F96}" -Value 0 -Type DWord
The GUID is Chrome's specific update token. Now Chrome stays on whatever version you installed until you manually upgrade via winget.
Chrome Enterprise policies
For real fleet management, drop a master_preferences file alongside Chrome:
$prefsPath = "C:\Program Files\Google\Chrome\Application\master_preferences"
@'
{
"homepage": "https://intranet.company.com",
"homepage_is_newtabpage": false,
"browser": {
"show_home_button": true
},
"distribution": {
"skip_first_run_ui": true,
"make_chrome_default": false,
"suppress_first_run_default_browser_prompt": true,
"import_bookmarks": false,
"do_not_create_desktop_shortcut": false,
"do_not_create_quicklaunch_shortcut": true,
"do_not_create_taskbar_shortcut": false
}
}
'@ | Out-File -Encoding utf8 $prefsPath
For full ADMX policy templates (140+ knobs including extension allowlist, proxy config, sign-in restrictions), grab Chrome Enterprise Bundle.
Specify version
Pinning to an older Chrome for compatibility testing:
winget install --id Google.Chrome -e --version 138.0.7204.158 --silent
List versions:
winget show --id Google.Chrome --versions
⚠️ Chrome auto-updates aggressively — even if you pin via winget, GoogleUpdate.exe will update it within hours unless you also disable auto-updates (see above).
Pin to stop winget noise
Because Chrome self-updates, winget upgrade often reports it as outdated when the running version is already newer than the manifest. Silence this:
winget pin add --id Google.Chrome
Now winget upgrade --all skips Chrome and lets Google's own updater handle it. See winget pin guide.
Verify
& "C:\Program Files\Google\Chrome\Application\chrome.exe" --version
# Google Chrome 148.0.7778.179
Uninstall silently
winget uninstall --id Google.Chrome --silent --disable-interactivity
To also wipe the user profile (bookmarks, history, saved passwords, extensions):
winget uninstall --id Google.Chrome --silent
Remove-Item "$env:LOCALAPPDATA\Google\Chrome" -Recurse -Force -ErrorAction SilentlyContinue
⚠️ This deletes your saved Chrome data. Sync via Google account beforehand if you want to recover it on the next install.
In a privacy-conscious setup
If you'd rather not have Chrome at all, install one of the de-Googled forks instead — they install just as silently:
winget install --id Brave.Brave -e --silent
winget install --id Mozilla.Firefox -e --silent
winget install --id Vivaldi.Vivaldi -e --silent
Common errors
Chrome is already installed — winget detects existing install (often from Google's own auto-installer running before winget). Use --force to overlay:
winget install --id Google.Chrome -e --silent --force
0x80073D02 — Chrome is currently in use — Chrome plus MSEdgeUpdate.exe-style helpers stay running. Kill them:
Get-Process | Where-Object { $_.Name -like "*chrome*" -or $_.Name -like "*GoogleUpdate*" } | Stop-Process -Force
winget upgrade --id Google.Chrome
See 0x80073D02 fix.
winget upgrade says Chrome is outdated forever — version-string mismatch with GoogleUpdate. Pin Chrome (see above). See winget upgrade not working fix.
See also
- Google Chrome on winget.tech → — full package details
- How to install Mozilla Firefox silently → — sibling browser guide
- Fresh Windows 11 setup → — full machine workflow
- Office bundle → — Chrome + Slack + Zoom + Bitwarden