入力オプションに応じて、HKCU(ユーザー)パスまたはHKLM(システム)パスのいずれかのレジストリを介してPATH変数にディレクトリを追加するプログラムを作成しました。レジストリでPython winreg経由でWindowsシステムPATHを設定する
ユーザーパスを使用するとうまくいきます。 しかし、システムのパスを設定するとき、Windowsはパス変数が空であるかのように動作します。
'notepad' is not recognized as an internal or external command....
しかし、echo %path%
は、構文エラーなしで、適切にすべてを出力します。同様に、システムプロパティGUIで変数を表示すると、フルパスが適切に表示されます。
%SystemRoot%\system32;%SystemRoot%;
私は手動で(すなわち、顕著な一見無関係な変更を行う)GUIでその変数を開き、最後のセミコロンを追加または削除する場合さて、その後、パスが正常に動作するようです。
はい、新しいコマンドウィンドウを開いてパスを確認しています。マシンを再起動しても何もしないようです。
アイデア?
コードの抜粋はここにある:コメントのように
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)
パスは、その中に1つ以上の「%」文字が含まれている場合は、 'REG_EXPAND_SZ'値を作成する必要があります。 – eryksun
また、Explorerが環境をリロードするようにするには、ctypesまたはPyWin32を使用して['WM_SETTINGCHANGE'](https://msdn.microsoft.com/en-us/library/ms725497)「環境」メッセージをブロードキャストする必要があります。 – eryksun
@REG_EXPAND_SZがトリックをしました! ---そのプロパティは**の**%を含んでいない場合は動作しますか? – tenwest