0

Installshield から使用している C# dll を使用して、Oracle のパスをパス環境システム変数に追加し、インスタント クライアントにより Oracle データベースに接続できるようにしています。

初めてインストーラーを実行すると、成功しませんが、パス変数を変更します。パスは最初の実行から既に変更されているため、2 回目の試行で成功します。つまり、Oracle データベース プロバイダーは、コードで変更した直後に変更を表示しないということです。

インストールを再度試行する必要なく、パス変数への変更を検出する方法が必要です。

var ancientPath = Environment.GetEnvironmentVariable("path", EnvironmentVariableTarget.Machine); 

Environment.SetEnvironmentVariable("path", ancientPath + ";" + tmp, EnvironmentVariableTarget.Machine);
4

2 に答える 2

0

あなたがやろうとしていることは、明らかに実行不可能です。プロセスはそれ自身の環境を変更でき、異なる環境でプロセスを生成できますが、プロセスは別のプロセスの環境を変更できません。最初のインストール後に新しいプロセスを起動すると、更新されたパスが表示されます。

既存のプロセスで新しい環境変数を使用する場合は、プロセスを再起動する必要があります。パス情報がないためにインストーラーが失敗する場合は、それを回避する必要があります。

于 2013-05-08T14:40:55.057 に答える
0

次の MSDN 記事に記載されているように、すべてのウィンドウにWM_SETTINGCHANGEメッセージを送信してみてください。

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "環境", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);

于 2013-05-09T13:53:29.497 に答える