Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Uninstalls Chrome. | 5 """Uninstalls Chrome. |
| 6 | 6 |
| 7 This script reads the uninstall command from registry, calls it, and verifies | 7 This script reads the uninstall command from registry, calls it, and verifies |
| 8 the output status code. | 8 the output status code. |
| 9 """ | 9 """ |
| 10 | 10 |
| 11 import _winreg | 11 import _winreg |
| 12 import optparse | 12 import optparse |
| 13 import subprocess | 13 import subprocess |
| 14 import sys | 14 import sys |
| 15 | 15 |
| 16 | 16 |
| 17 def main(): | 17 def main(): |
| 18 parser = optparse.OptionParser(description='Uninstall Chrome.') | 18 parser = optparse.OptionParser(description='Uninstall Chrome.') |
| 19 parser.add_option('--system-level', action='store_true', dest='system_level', | 19 parser.add_option('--system-level', action='store_true', dest='system_level', |
| 20 default=False, help='Uninstall Chrome at system level.') | 20 default=False, help='Uninstall Chrome at system level.') |
| 21 parser.add_option('--chrome-long-name', default='Google Chrome', | 21 parser.add_option('--chrome-long-name', default='Google Chrome', |
| 22 help='Google Chrome or Chromium)') | 22 help='Google Chrome or Chromium)') |
| 23 parser.add_option('--silent', action='store_true', dest='silent', | |
|
gab
2013/09/13 15:06:19
How about: --no-error-if-absent or something more
sukolsak
2013/09/13 15:59:33
Will do.
gab
2013/09/13 20:12:55
I meant in this CL...
sukolsak
2013/09/13 23:11:14
Done. Yes, I was waiting for your reply.
gab
2013/09/16 13:59:58
Ah ok, my bad :)!
| |
| 24 default=False, help='Silently return if the registry key ' | |
| 25 'for uninstalling Chrome is not found') | |
| 23 options, _ = parser.parse_args() | 26 options, _ = parser.parse_args() |
| 24 | 27 |
| 25 # TODO(sukolsak): Add support for uninstalling MSI-based Chrome installs when | 28 # TODO(sukolsak): Add support for uninstalling MSI-based Chrome installs when |
| 26 # we support testing MSIs. | 29 # we support testing MSIs. |
| 27 if options.system_level: | 30 if options.system_level: |
| 28 root_key = _winreg.HKEY_LOCAL_MACHINE | 31 root_key = _winreg.HKEY_LOCAL_MACHINE |
| 29 else: | 32 else: |
| 30 root_key = _winreg.HKEY_CURRENT_USER | 33 root_key = _winreg.HKEY_CURRENT_USER |
| 31 sub_key = ('SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%s' % | 34 sub_key = ('SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%s' % |
| 32 options.chrome_long_name) | 35 options.chrome_long_name) |
| 33 # Query the key. It will throw a WindowsError if the key doesn't exist. | 36 # Query the key. It will throw a WindowsError if the key doesn't exist. |
| 34 try: | 37 try: |
| 35 key = _winreg.OpenKey(root_key, sub_key, 0, _winreg.KEY_QUERY_VALUE) | 38 key = _winreg.OpenKey(root_key, sub_key, 0, _winreg.KEY_QUERY_VALUE) |
| 36 except WindowsError: | 39 except WindowsError: |
| 40 if options.silent: | |
| 41 return 1 | |
|
gab
2013/09/13 15:06:19
I'd say we should return 0 here.
sukolsak
2013/09/13 15:59:33
Will do.
gab
2013/09/13 20:12:55
I meant in this CL...
sukolsak
2013/09/13 23:11:14
Done.
| |
| 37 raise KeyError('Registry key %s\\%s is missing' % ( | 42 raise KeyError('Registry key %s\\%s is missing' % ( |
| 38 'HKEY_LOCAL_MACHINE' if options.system_level else 'HKEY_CURRENT_USER', | 43 'HKEY_LOCAL_MACHINE' if options.system_level else 'HKEY_CURRENT_USER', |
| 39 sub_key)) | 44 sub_key)) |
| 40 uninstall_string, _ = _winreg.QueryValueEx(key, 'UninstallString') | 45 uninstall_string, _ = _winreg.QueryValueEx(key, 'UninstallString') |
| 41 exit_status = subprocess.call(uninstall_string + ' --force-uninstall', | 46 exit_status = subprocess.call(uninstall_string + ' --force-uninstall', |
| 42 shell=True) | 47 shell=True) |
| 43 # The exit status for successful uninstallation of Chrome is 19 (see | 48 # The exit status for successful uninstallation of Chrome is 19 (see |
| 44 # chrome/installer/util/util_constants.h). | 49 # chrome/installer/util/util_constants.h). |
| 45 if exit_status != 19: | 50 if exit_status != 19: |
| 46 raise Exception('Could not uninstall Chrome. The installer exited with ' | 51 raise Exception('Could not uninstall Chrome. The installer exited with ' |
| 47 'status %d.' % exit_status) | 52 'status %d.' % exit_status) |
| 48 return 0 | 53 return 0 |
| 49 | 54 |
| 50 | 55 |
| 51 if __name__ == '__main__': | 56 if __name__ == '__main__': |
| 52 sys.exit(main()) | 57 sys.exit(main()) |
| OLD | NEW |