OLD | NEW |
(Empty) | |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 """Makes an existing per-user Chrome appear to be multi-install Chrome. |
| 6 |
| 7 This script makes minimal mutations to the Windows registry to make ordinary |
| 8 single-install Chrome appear to be multi-install for purposes of testing multi- |
| 9 to single- migrations. |
| 10 """ |
| 11 |
| 12 import _winreg |
| 13 import argparse |
| 14 import sys |
| 15 |
| 16 |
| 17 def MakeChromeMulti(chrome_long_name, chrome_clients_key, |
| 18 chrome_client_state_key, binaries_clients_key): |
| 19 # Update the control panel's uninstall string. |
| 20 key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, |
| 21 ('Software\\Microsoft\\Windows\\CurrentVersion\\' |
| 22 'Uninstall\\%s' % chrome_long_name), 0, |
| 23 _winreg.KEY_QUERY_VALUE | _winreg.KEY_SET_VALUE | |
| 24 _winreg.KEY_WOW64_32KEY) |
| 25 string = _winreg.QueryValueEx(key, 'UninstallString')[0] |
| 26 string = string.replace('--uninstall', '--uninstall --multi-install --chrome') |
| 27 _winreg.SetValueEx(key, 'UninstallString', 0, _winreg.REG_SZ, string) |
| 28 |
| 29 # Read Chrome's version number. |
| 30 key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, |
| 31 chrome_clients_key, 0, |
| 32 _winreg.KEY_QUERY_VALUE | _winreg.KEY_WOW64_32KEY) |
| 33 pv = _winreg.QueryValueEx(key, 'pv')[0] |
| 34 _winreg.CloseKey(key) |
| 35 |
| 36 # Write that version for the binaries. |
| 37 key = _winreg.CreateKeyEx(_winreg.HKEY_CURRENT_USER, |
| 38 binaries_clients_key, 0, |
| 39 _winreg.KEY_SET_VALUE | _winreg.KEY_WOW64_32KEY) |
| 40 _winreg.SetValueEx(key, 'pv', 0, _winreg.REG_SZ, pv) |
| 41 _winreg.CloseKey(key) |
| 42 |
| 43 # Add "--multi-install --chrome" to Chrome's UninstallArguments. |
| 44 key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, |
| 45 chrome_client_state_key, 0, |
| 46 _winreg.KEY_QUERY_VALUE | _winreg.KEY_SET_VALUE | |
| 47 _winreg.KEY_WOW64_32KEY) |
| 48 args = _winreg.QueryValueEx(key, 'UninstallArguments')[0] |
| 49 args += ' --multi-install --chrome' |
| 50 _winreg.SetValueEx(key, 'UninstallArguments', 0, _winreg.REG_SZ, args) |
| 51 |
| 52 |
| 53 def main(): |
| 54 parser = argparse.ArgumentParser( |
| 55 description='Transforms single-install Chrome into multi-install.') |
| 56 parser.add_argument('--chrome-long-name', default='Google Chrome', |
| 57 help='The full name of the product.') |
| 58 parser.add_argument('--chrome-clients-key', |
| 59 default='Software\\Google\\Update\\Clients\\' |
| 60 '{8A69D345-D564-463c-AFF1-A69D9E530F96}', |
| 61 help='Chrome\'s Clients registry key path.') |
| 62 parser.add_argument('--chrome-client-state-key', |
| 63 default='Software\\Google\\Update\\ClientState\\' |
| 64 '{8A69D345-D564-463c-AFF1-A69D9E530F96}', |
| 65 help='Chrome\'s ClientState registry key path.') |
| 66 parser.add_argument('--binaries-clients-key', |
| 67 default='Software\\Google\\Update\\Clients\\' |
| 68 '{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}', |
| 69 help='Chrome Binaries\' Clients registry key path.') |
| 70 args = parser.parse_args() |
| 71 MakeChromeMulti(args.chrome_long_name, |
| 72 args.chrome_clients_key, |
| 73 args.chrome_client_state_key, |
| 74 args.binaries_clients_key) |
| 75 return 0 |
| 76 |
| 77 |
| 78 if __name__ == '__main__': |
| 79 sys.exit(main()) |
OLD | NEW |