19

グローバル Windows パス環境変数をプログラム (C++) で設定する方法はありますか?

私が見る限り、putenv は現在のアプリケーションに対してのみ設定しています。
レジストリを直接変更すること(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)もオプションですが、ある場合は API メソッドを使用したいと思いますか?

4

5 に答える 5

26

MSDN のコメント:

SetEnvironmentVariable を呼び出しても、システム環境変数には影響しません。システム環境変数をプログラムで追加または変更するには、それらを HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment レジストリ キーに追加し、lParam を文字列 "Environment" に設定して WM_SETTINGCHANGE メッセージをブロードキャストします。これにより、シェルなどのアプリケーションが更新を取得できるようになります。このキーにリストされている環境変数の値は、1024 文字に制限されていることに注意してください。

于 2009-02-10T12:35:12.193 に答える
12

前に指摘したように、マシンレベルでPATHを変更するには、次のレジストリエントリを変更するだけです。

HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

ただし、次のレジストリエントリを変更して、ユーザーレベルでPATHを設定することもできます。

HKEY_CURRENT_USER\Environment\Path

また、次のレジストリエントリにapplication \ Pathの詳細を追加することにより、アプリケーションレベルでPATHを設定することもできます。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\
于 2009-02-11T02:39:16.563 に答える
3

API はありません。レジストリを変更する方法があります。変更された値は、変更が行われた後に開始されるプロセスに使用されます。

また、実行中のアプリケーションは設定変更メッセージを積極的に処理する必要がありますが、多くの (ほとんどの?) アプリケーションはそうしないことに注意してください。

于 2009-02-10T12:02:30.400 に答える
2

はい。それで合っています。ログオフせずにこれらの設定を有効にする必要もあります

SendMessageTimeout APIを使用して、SMTO_ABORTIFHUNGでパラメータ(LPARAM)「環境」のSETTINGCHANGEを数ミリ秒(5000)の間、すべてのウィンドウにboradキャストのメッセージを送信します。

これは、リソース キットで提供される setX.exe が行うことです。

于 2009-02-10T12:43:49.550 に答える
2

レジストリを介して実行したい場合は、このプログラムのソース コードを確認することをお勧めします。

Microsoft は setx と呼ばれる小さなコマンド ライン ユーティリティとそのリソース ツールキットも提供しています。ちなみに、通常の set コマンドでは、ローカル環境変数を定義できるだけだと思います。

于 2009-02-10T12:12:36.600 に答える