OSの仕様的な話のような気もしますが
プログラムを実行したときの、Windows環境変数 PATH は、実行した時点の PATH が取得できます。
SetEnvironmentVariable なんかを使えば、追加もできます。
プログラムを起動したままで、何らかのインストーラーが 環境変数PATH に追加(変更)したとき、
追加された後の 環境変数 PATH を取得する方法はありますか?
システム環境変数をプロセス環境変数に上書きする(初期化?再設定?)
または、
システム環境変数そのものを取得(レジストリ?)
なぜこんな質問になるかというと、あるインストーラーを自プログラムから起動して
インストールまで自動化したものの、その後の処理(環境構築)がうまくいかない。
でも、原因が特定しきれていないため、とりあえず環境変数のせいにして、解決できるかの確認です。
環境変数 - Win32 apps | Microsoft Learn
https://learn.microsoft.com/ja-jp/windows/win32/procthread/environment-variables
を見ると、システム環境変数の書き換えはWM_SETTINGCHANGEメッセージでLParamが文字列"Environment"になっているものを捕捉してレジストリキー"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"を読めばよさそうな感じです。
試していないんですが、参考にしてください。
HFUKUSHIさん、ありがとうございます。
「レジストリ読めても、GetEnvironmentVariableで読めないと意味ないよね」って考えていたのですが、
自分で書いてましたね。レジストリ読んで、SetEnvironmentVariableで、書き換えてしまえばいいんですね。
WM_SETTINGCHANGEメッセージが飛んできているかはともかく、インストーラーの終了確認は取得できているので
インストール終了時にレジストリを読む方法で、やってみます。
暑い日が続いています。
お急ぎの仕事もあるでしょうが、寝ることで解決するかもしれませんよ。 < しません
私の記憶が確かなら,SetEnvironmentVariable 関数による設定はプロセス単位です.
Set コマンドであればシステム単位です.
ツイート | ![]() |