Improve error message printing on registry env. var sets.
This commit is contained in:
29
emsdk
29
emsdk
@@ -139,16 +139,17 @@ def win_set_environment_variable_direct(key, value, system=True):
|
|||||||
else: # Register locally from CURRENT USER section.
|
else: # Register locally from CURRENT USER section.
|
||||||
folder = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, 'Environment', 0, win32con.KEY_ALL_ACCESS)
|
folder = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, 'Environment', 0, win32con.KEY_ALL_ACCESS)
|
||||||
win32api.RegSetValueEx(folder, key, 0, win32con.REG_EXPAND_SZ, value)
|
win32api.RegSetValueEx(folder, key, 0, win32con.REG_EXPAND_SZ, value)
|
||||||
|
if VERBOSE: print('Set key=' + key + ' with value ' + value + ' in registry.')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if e[0] == 5 or e[2] == 'Access is denied.':
|
if e[0] == 5 or e[2] == 'Access is denied.':
|
||||||
print('Error! Failed to set the environment variable \'' + key + '\'! Setting environment variables permanently requires administrator access. Please rerun this command with administrative privileges. This can be done for example by holding down the Ctrl and Shift keys while opening a command prompt in start menu.')
|
print('Error! Failed to set the environment variable \'' + key + '\'! Setting environment variables permanently requires administrator access. Please rerun this command with administrative privileges. This can be done for example by holding down the Ctrl and Shift keys while opening a command prompt in start menu.')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
if e[0] != 2: # 'The system cannot find the file specified.'
|
print('Failed to write environment variable ' + key + ':', file=sys.stderr)
|
||||||
print('Failed to write environment variable ' + key + ':', file=sys.stderr)
|
print(str(e), file=sys.stderr)
|
||||||
print(str(e), file=sys.stderr)
|
|
||||||
win32api.RegCloseKey(folder)
|
win32api.RegCloseKey(folder)
|
||||||
os.environ['PATH'] = prev_path
|
os.environ['PATH'] = prev_path
|
||||||
return None
|
return None
|
||||||
|
|
||||||
win32api.RegCloseKey(folder)
|
win32api.RegCloseKey(folder)
|
||||||
os.environ['PATH'] = prev_path
|
os.environ['PATH'] = prev_path
|
||||||
win32api.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE, 0, 'Environment')
|
win32api.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE, 0, 'Environment')
|
||||||
@@ -191,14 +192,17 @@ def win_set_environment_variable(key, value, system=True):
|
|||||||
if VERBOSE: print('set ' + str(key) + '=' + str(value) + ', in system=' + str(system), file=sys.stderr)
|
if VERBOSE: print('set ' + str(key) + '=' + str(value) + ', in system=' + str(system), file=sys.stderr)
|
||||||
previous_value = win_get_environment_variable(key, system)
|
previous_value = win_get_environment_variable(key, system)
|
||||||
if previous_value == value:
|
if previous_value == value:
|
||||||
|
if VERBOSE: print(' no need to set, since same value already exists.')
|
||||||
return # No need to elevate UAC for nothing to set the same value, skip.
|
return # No need to elevate UAC for nothing to set the same value, skip.
|
||||||
|
|
||||||
if not value:
|
if not value:
|
||||||
try:
|
try:
|
||||||
if system:
|
if system:
|
||||||
value = subprocess.call(['REG', 'DELETE', 'SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment', '/V', key, '/f'], stdout=subprocess.PIPE)
|
cmd = ['REG', 'DELETE', 'SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment', '/V', key, '/f']
|
||||||
else:
|
else:
|
||||||
value = subprocess.call(['REG', 'DELETE', 'HKCU\\Environment', '/V', key, '/f'], stdout=subprocess.PIPE)
|
cmd = ['REG', 'DELETE', 'HKCU\\Environment', '/V', key, '/f']
|
||||||
|
if VERBOSE: print(str(cmd))
|
||||||
|
value = subprocess.call(cmd, stdout=subprocess.PIPE)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return
|
return
|
||||||
return
|
return
|
||||||
@@ -207,14 +211,13 @@ def win_set_environment_variable(key, value, system=True):
|
|||||||
if system:
|
if system:
|
||||||
win_set_environment_variable_direct(key, value, system)
|
win_set_environment_variable_direct(key, value, system)
|
||||||
return
|
return
|
||||||
else:
|
value = value.replace('%', '^%') # Escape % signs so that we don't expand references to environment variables.
|
||||||
if len(value) < 1024:
|
if len(value) >= 1024:
|
||||||
cmd = ['SETX']
|
print('ERROR! The new environment variable ' + key + ' is more than 1024 characters long! A value this long cannot be set via command line: please add the environment variable specified above to system environment manually via Control Panel.', file=sys.stderr)
|
||||||
else:
|
sys.exit(1)
|
||||||
print('ERROR! The new environment variable ' + key + ' is more than 1024 characters long! A value this long cannot be set via command line: please add the environment variable specified above to system environment manually via Control Panel.', file=sys.stderr)
|
cmd = ['SETX', key, value]
|
||||||
sys.exit(1)
|
if VERBOSE: print(str(cmd))
|
||||||
if WINDOWS: value = value.replace('%', '^%') # Escape % signs so that we don't expand references to environment variables.
|
retcode = subprocess.call(cmd, stdout=subprocess.PIPE)
|
||||||
retcode = subprocess.call(cmd + [key, value], stdout=subprocess.PIPE)
|
|
||||||
if retcode is not 0:
|
if retcode is not 0:
|
||||||
print('ERROR! Failed to set environment variable ' + key + '=' + value + '. You may need to set it manually.', file=sys.stderr)
|
print('ERROR! Failed to set environment variable ' + key + '=' + value + '. You may need to set it manually.', file=sys.stderr)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user