私のC#アプリでは、Oracleクライアントが存在しない場合はプログラムでインストールしています。これには、PATHシステム環境変数にdirを追加する必要があります。これはすべて正常に機能しますが、ユーザーがWindowsにログアウト/ログインするか、再起動するまで有効になりません。この手順を実行せずに、アプリで新しいPATH変数を認識して使用するにはどうすればよいですか?アプリを再起動するだけでも、ユーザーにログアウト/ログインを要求するよりはましです。
おそらく、この変更を他のプロセスにブロードキャストすることは機能するはずです。これが私が試したものですが、成功しませんでした:
using System.Runtime.InteropServices;
private const int HWND_BROADCAST = 0xffff;
private const int WM_WININICHANGE = 0x001a, WM_SETTINGCHANGE = WM_WININICHANGE, INI_INTL = 1;
[DllImport("user32.dll")]
private static extern int SendMessageTimeoutA(int hWnd, uint wMsg, uint wParam, string lParam, int fuFlags, int uTimeout, int lpdwResult);
int rtnVal = 0;
SendMessageTimeoutA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, "Environment", 2, 5000, rtnVal);
問題のプロセスを停止して再起動すると、この種の変更が反映されるはずだと言われましたが、アプリを再起動してもうまくいきません。オラクルの問題である可能性があると思います。オラクルに関する何かが変更を認識するためにログインを必要とするのか、私にはわかりません。前もって感謝します。