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 import os | 5 import os |
6 import string | 6 import string |
7 import win32api | 7 import win32api |
8 import win32com.client | 8 import win32com.client |
9 from win32com.shell import shell, shellcon | 9 from win32com.shell import shell, shellcon |
10 | 10 |
11 | 11 |
| 12 def _GetProductName(file_path): |
| 13 """Returns the product name of the given file. |
| 14 |
| 15 Args: |
| 16 file_path: The absolute or relative path to the file. |
| 17 |
| 18 Returns: |
| 19 A string representing the product name of the file, or None if the product |
| 20 name was not found. |
| 21 """ |
| 22 language_and_codepage_pairs = win32api.GetFileVersionInfo( |
| 23 file_path, '\\VarFileInfo\\Translation') |
| 24 if not language_and_codepage_pairs: |
| 25 return None |
| 26 product_name_entry = ('\\StringFileInfo\\%04x%04x\\ProductName' % |
| 27 language_and_codepage_pairs[0]) |
| 28 return win32api.GetFileVersionInfo(file_path, product_name_entry) |
| 29 |
| 30 |
12 def ResolvePath(path): | 31 def ResolvePath(path): |
13 """Resolves variables in a file path, and returns the resolved path. | 32 """Resolves variables in a file path, and returns the resolved path. |
14 | 33 |
15 This method resolves only variables defined below. It does not resolve | 34 This method resolves only variables defined below. It does not resolve |
16 environment variables. Any dollar signs that are not part of variables must be | 35 environment variables. Any dollar signs that are not part of variables must be |
17 escaped with $$, otherwise a KeyError or a ValueError will be raised. | 36 escaped with $$, otherwise a KeyError or a ValueError will be raised. |
18 | 37 |
19 Args: | 38 Args: |
20 path: An absolute or relative path. | 39 path: An absolute or relative path. |
21 | 40 |
(...skipping 12 matching lines...) Expand all Loading... |
34 root key, of Chrome for Google Update. | 53 root key, of Chrome for Google Update. |
35 """ | 54 """ |
36 program_files_path = shell.SHGetFolderPath(0, shellcon.CSIDL_PROGRAM_FILES, | 55 program_files_path = shell.SHGetFolderPath(0, shellcon.CSIDL_PROGRAM_FILES, |
37 None, 0) | 56 None, 0) |
38 local_appdata_path = shell.SHGetFolderPath(0, shellcon.CSIDL_LOCAL_APPDATA, | 57 local_appdata_path = shell.SHGetFolderPath(0, shellcon.CSIDL_LOCAL_APPDATA, |
39 None, 0) | 58 None, 0) |
40 # TODO(sukolsak): Copy the mini_installer.exe from the build output into here. | 59 # TODO(sukolsak): Copy the mini_installer.exe from the build output into here. |
41 mini_installer_path = os.path.abspath('mini_installer.exe') | 60 mini_installer_path = os.path.abspath('mini_installer.exe') |
42 mini_installer_file_version = win32com.client.Dispatch( | 61 mini_installer_file_version = win32com.client.Dispatch( |
43 'Scripting.FileSystemObject').GetFileVersion(mini_installer_path) | 62 'Scripting.FileSystemObject').GetFileVersion(mini_installer_path) |
44 # TODO(sukolsak): Check whether this is Chrome or Chromium. | 63 mini_installer_product_name = _GetProductName(mini_installer_path) |
45 is_chrome = True | 64 if mini_installer_product_name == 'Google Chrome': |
46 if is_chrome: | |
47 chrome_short_name = 'Chrome' | 65 chrome_short_name = 'Chrome' |
48 chrome_long_name = 'Google Chrome' | 66 chrome_long_name = 'Google Chrome' |
49 chrome_dir = 'Google\\Chrome' | 67 chrome_dir = 'Google\\Chrome' |
50 chrome_update_registry_subkey = ('Software\\Google\\Update\\Clients\\' | 68 chrome_update_registry_subkey = ('Software\\Google\\Update\\Clients\\' |
51 '{8A69D345-D564-463c-AFF1-A69D9E530F96}') | 69 '{8A69D345-D564-463c-AFF1-A69D9E530F96}') |
52 else: | 70 elif mini_installer_product_name == 'Chromium': |
53 chrome_short_name = 'Chromium' | 71 chrome_short_name = 'Chromium' |
54 chrome_long_name = 'Chromium' | 72 chrome_long_name = 'Chromium' |
55 chrome_dir = 'Chromium' | 73 chrome_dir = 'Chromium' |
56 chrome_update_registry_subkey = 'Software\\Chromium' | 74 chrome_update_registry_subkey = 'Software\\Chromium' |
| 75 else: |
| 76 raise KeyError("Unknown mini_installer product name '%s'" % |
| 77 mini_installer_product_name) |
57 | 78 |
58 variable_mapping = { | 79 variable_mapping = { |
59 'PROGRAM_FILES': program_files_path, | 80 'PROGRAM_FILES': program_files_path, |
60 'LOCAL_APPDATA': local_appdata_path, | 81 'LOCAL_APPDATA': local_appdata_path, |
61 'MINI_INSTALLER': mini_installer_path, | 82 'MINI_INSTALLER': mini_installer_path, |
62 'MINI_INSTALLER_FILE_VERSION': mini_installer_file_version, | 83 'MINI_INSTALLER_FILE_VERSION': mini_installer_file_version, |
63 'CHROME_SHORT_NAME': chrome_short_name, | 84 'CHROME_SHORT_NAME': chrome_short_name, |
64 'CHROME_LONG_NAME': chrome_long_name, | 85 'CHROME_LONG_NAME': chrome_long_name, |
65 'CHROME_DIR': chrome_dir, | 86 'CHROME_DIR': chrome_dir, |
66 'CHROME_UPDATE_REGISTRY_SUBKEY': chrome_update_registry_subkey, | 87 'CHROME_UPDATE_REGISTRY_SUBKEY': chrome_update_registry_subkey, |
67 } | 88 } |
68 return string.Template(path).substitute(variable_mapping) | 89 return string.Template(path).substitute(variable_mapping) |
OLD | NEW |