Ich habe ein Programm geschrieben, um Verzeichnisse zu der PATH-Variable über die Registrierung hinzufügen, entweder der HKCU (Benutzer) oder HKLM (System) -Pfad, abhängig von einer Eingabeoption.Windows-System PATH in der Registrierung über Python einstellen winreg
Es funktioniert gut, wenn Sie den Benutzerpfad verwenden. Wenn jedoch der Pfad für das System festgelegt wird, verhält sich Windows so, als ob die Pfadvariable leer wäre, z.
'notepad' is not recognized as an internal or external command....
jedoch echo %path%
druckt alles in geeigneter Weise aus, ohne Syntaxfehler. Wenn ich die Variable in der GUI für Systemeigenschaften anzeigen lasse, zeigt sie ähnlich meinen vollständigen Pfad an, z.
%SystemRoot%\system32;%SystemRoot%;
Nun, wenn ich in der GUI diese Variable manuell öffnen und hinzufügen oder den nachgestellten Semikolon entfernen (das heißt eine spürbare aber scheinbar irrelevante Änderung vornehme), dann scheint der Weg gut zu funktionieren.
Ja, ich öffne ein neues Befehlsfenster, um den Pfad zu überprüfen. Neustart der Maschine scheint auch nichts zu tun.
Irgendwelche Ideen?
Codeauszug ist hier:
import _winreg as registry
#HKEY_LOCAL_MACHINE\
SYS_ENV_SUBPATH = r"SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
#HKEY_CURRENT_USER\
USR_ENV_SUBPATH = r"Environment"
def update_reg_path_value(paths_to_add,privilege):
env_key = open_env_registry_key(privilege)
current_path = get_path_from_registry_or_create(env_key)
val_string = create_new_path_value(current_path, paths_to_add)
registry.SetValueEx(env_key,"Path",0,registry.REG_SZ,val_string)
def open_env_registry_key(privilege):
if privilege == 'system':
return registry.OpenKey(registry.HKEY_LOCAL_MACHINE,SYS_ENV_SUBPATH,
0,registry.KEY_ALL_ACCESS)
return registry.OpenKey(registry.HKEY_CURRENT_USER,USR_ENV_SUBPATH,
0,registry.KEY_ALL_ACCESS)
Wenn der Pfad ein oder mehr Zeichen „%“ in sich hat, dann müssen Sie einen 'REG_EXPAND_SZ' Wert zu schaffen. – eryksun
Um Explorer dazu zu bringen, die Umgebung neu zu laden, müssen Sie ctypes oder PyWin32 verwenden, um eine "WM_SETTINGCHANGE" (https://msdn.microsoft.com/en-us/library/ms725497) "Environment" -Meldung zu senden. – eryksun
@REG_EXPAND_SZ hat den Trick gemacht !! --- Wird diese Immobilie funktionieren, wenn **% ** nicht ** enthält? – tenwest