グローバル Windows パス環境変数をプログラム (C++) で設定する方法はありますか?
私が見る限り、putenv は現在のアプリケーションに対してのみ設定しています。
レジストリを直接変更すること(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)
もオプションですが、ある場合は API メソッドを使用したいと思いますか?
5 に答える
MSDN のコメント:
SetEnvironmentVariable を呼び出しても、システム環境変数には影響しません。システム環境変数をプログラムで追加または変更するには、それらを HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment レジストリ キーに追加し、lParam を文字列 "Environment" に設定して WM_SETTINGCHANGE メッセージをブロードキャストします。これにより、シェルなどのアプリケーションが更新を取得できるようになります。このキーにリストされている環境変数の値は、1024 文字に制限されていることに注意してください。
前に指摘したように、マシンレベルでPATHを変更するには、次のレジストリエントリを変更するだけです。
HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
ただし、次のレジストリエントリを変更して、ユーザーレベルでPATHを設定することもできます。
HKEY_CURRENT_USER\Environment\Path
また、次のレジストリエントリにapplication \ Pathの詳細を追加することにより、アプリケーションレベルでPATHを設定することもできます。
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\
API はありません。レジストリを変更する方法があります。変更された値は、変更が行われた後に開始されるプロセスに使用されます。
また、実行中のアプリケーションは設定変更メッセージを積極的に処理する必要がありますが、多くの (ほとんどの?) アプリケーションはそうしないことに注意してください。
はい。それで合っています。ログオフせずにこれらの設定を有効にする必要もあります
SendMessageTimeout APIを使用して、SMTO_ABORTIFHUNGでパラメータ(LPARAM)「環境」のSETTINGCHANGEを数ミリ秒(5000)の間、すべてのウィンドウにboradキャストのメッセージを送信します。
これは、リソース キットで提供される setX.exe が行うことです。
レジストリを介して実行したい場合は、このプログラムのソース コードを確認することをお勧めします。
Microsoft は setx と呼ばれる小さなコマンド ライン ユーティリティとそのリソース ツールキットも提供しています。ちなみに、通常の set コマンドでは、ローカル環境変数を定義できるだけだと思います。