blob: 8910a45326a1ba97678a42760cfcbef258a1d23f [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Makes an existing per-user Chrome appear to be multi-install Chrome.
This script makes minimal mutations to the Windows registry to make ordinary
single-install Chrome appear to be multi-install for purposes of testing multi-
to single- migrations.
"""
import _winreg
import argparse
import sys
def MakeChromeMulti(chrome_long_name, chrome_clients_key,
chrome_client_state_key, binaries_clients_key):
# Update the control panel's uninstall string.
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
('Software\\Microsoft\\Windows\\CurrentVersion\\'
'Uninstall\\%s' % chrome_long_name), 0,
_winreg.KEY_QUERY_VALUE | _winreg.KEY_SET_VALUE |
_winreg.KEY_WOW64_32KEY)
string = _winreg.QueryValueEx(key, 'UninstallString')[0]
string = string.replace('--uninstall', '--uninstall --multi-install --chrome')
_winreg.SetValueEx(key, 'UninstallString', 0, _winreg.REG_SZ, string)
# Read Chrome's version number.
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
chrome_clients_key, 0,
_winreg.KEY_QUERY_VALUE | _winreg.KEY_WOW64_32KEY)
pv = _winreg.QueryValueEx(key, 'pv')[0]
_winreg.CloseKey(key)
# Write that version for the binaries.
key = _winreg.CreateKeyEx(_winreg.HKEY_CURRENT_USER,
binaries_clients_key, 0,
_winreg.KEY_SET_VALUE | _winreg.KEY_WOW64_32KEY)
_winreg.SetValueEx(key, 'pv', 0, _winreg.REG_SZ, pv)
_winreg.CloseKey(key)
# Add "--multi-install --chrome" to Chrome's UninstallArguments.
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
chrome_client_state_key, 0,
_winreg.KEY_QUERY_VALUE | _winreg.KEY_SET_VALUE |
_winreg.KEY_WOW64_32KEY)
args = _winreg.QueryValueEx(key, 'UninstallArguments')[0]
args += ' --multi-install --chrome'
_winreg.SetValueEx(key, 'UninstallArguments', 0, _winreg.REG_SZ, args)
def main():
parser = argparse.ArgumentParser(
description='Transforms single-install Chrome into multi-install.')
parser.add_argument('--chrome-long-name', default='Google Chrome',
help='The full name of the product.')
parser.add_argument('--chrome-clients-key',
default='Software\\Google\\Update\\Clients\\'
'{8A69D345-D564-463c-AFF1-A69D9E530F96}',
help='Chrome\'s Clients registry key path.')
parser.add_argument('--chrome-client-state-key',
default='Software\\Google\\Update\\ClientState\\'
'{8A69D345-D564-463c-AFF1-A69D9E530F96}',
help='Chrome\'s ClientState registry key path.')
parser.add_argument('--binaries-clients-key',
default='Software\\Google\\Update\\Clients\\'
'{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}',
help='Chrome Binaries\' Clients registry key path.')
args = parser.parse_args()
MakeChromeMulti(args.chrome_long_name,
args.chrome_clients_key,
args.chrome_client_state_key,
args.binaries_clients_key)
return 0
if __name__ == '__main__':
sys.exit(main())