環境変数の取得

解決


織田麻理  2023-08-04 06:42:06  No: 151058  IP: 192.*.*.*

OSの仕様的な話のような気もしますが

プログラムを実行したときの、Windows環境変数 PATH は、実行した時点の PATH が取得できます。
SetEnvironmentVariable なんかを使えば、追加もできます。
プログラムを起動したままで、何らかのインストーラーが 環境変数PATH に追加(変更)したとき、
追加された後の 環境変数 PATH を取得する方法はありますか?

システム環境変数をプロセス環境変数に上書きする(初期化?再設定?)
または、
システム環境変数そのものを取得(レジストリ?)

なぜこんな質問になるかというと、あるインストーラーを自プログラムから起動して
インストールまで自動化したものの、その後の処理(環境構築)がうまくいかない。
でも、原因が特定しきれていないため、とりあえず環境変数のせいにして、解決できるかの確認です。

編集 削除
HFUKUSHI  2023-08-04 11:16:43  No: 151059  IP: 192.*.*.*

環境変数 - 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"を読めばよさそうな感じです。

試していないんですが、参考にしてください。

編集 削除
織田麻理  2023-08-06 23:25:04  No: 151061  IP: 192.*.*.*

HFUKUSHIさん、ありがとうございます。
「レジストリ読めても、GetEnvironmentVariableで読めないと意味ないよね」って考えていたのですが、
自分で書いてましたね。レジストリ読んで、SetEnvironmentVariableで、書き換えてしまえばいいんですね。
WM_SETTINGCHANGEメッセージが飛んできているかはともかく、インストーラーの終了確認は取得できているので
インストール終了時にレジストリを読む方法で、やってみます。

暑い日が続いています。
お急ぎの仕事もあるでしょうが、寝ることで解決するかもしれませんよ。  < しません

編集 削除
Mr.XRAY  2023-08-10 01:40:37  No: 151062  IP: 192.*.*.*

私の記憶が確かなら,SetEnvironmentVariable 関数による設定はプロセス単位です.
Set コマンドであればシステム単位です.

編集 削除