1

Azure のフォルダーにいくつかのパッケージがあり、そのパスを VM の %PATH% システム変数に追加したいと考えています。これは、コードでそれらのパッケージを使用できるようにするためにプログラムで行う必要があります。POWERSHELL コマンドを使用して %PATH% 変数にフォルダー パスを追加しましたが、問題は、%PATH% を編集するときに、プロセスが新しい %PATH% を取得するためにプロセスを再起動する必要があることです。

今、私は Azure Web Role を使用していますが、どのように対処すればよいですか? 以下を使用して Web ロールを再起動/リサイクルする必要があります。

RoleEnvironment.RequestRecycle();

しかし、この方法では POWERSHELL スクリプトが再度実行され、%PATH% がリセットされます ?? フォルダーのパスを %PATH% 変数に追加する他の方法はありますか?プロセスは再起動/リサイクルする必要なくそれを使用しますか??

ps set/setx コマンドは既に試しました。「setx」は再起動を必要とし、「set」は現在のセッションのパスを設定するだけなので、どちらも機能しません。

4

1 に答える 1

1

私は自分の問題を解決しました。ここに回答を追加して、他の人に役立つようにします。

%PATH% システム変数にフォルダー パスを追加するたびに、

WM_SETTINGCHANGE

変更について知らせるために、すべてのトップレベル ウィンドウにメッセージを送信します。ただし、このメッセージをブロードキャストするプロセスは、再起動しない限り、更新された PATH 値を取得しません。Azure では、WindowsAzureGuestAgentプロセスを停止し、Web ロールの OnStart() メソッドからすぐに再開しました (再起動には約 15 ~ 20 秒かかります)。

var theController = new System.ServiceProcess.ServiceController("WindowsAzureGuestAgent");
    theController.Stop();
    theController.Start();

このようにして、PATH変数の更新された値を取得し、問題は解決しました。

于 2015-10-08T12:50:17.903 に答える