web-dev-qa-db-ja.com

サーバーを再起動せずにIISプロセスを「リサイクル」する方法は?

ASP.NETでPATHの変更を確認する
サーバーの環境PATH変数を変更しました。この変更を確認するには、IIS/W3WP(つまり、ASP.NETアプリ)が必要です。理解しています。 from この他の質問の答え それ(私の強調):

IISプロセスをリサイクルして更新する必要があります

私の質問:IISプロセスを「リサイクル」するにはどうすればよいですか?

これが私がこの問題を解決しようとしたことです:

  • 使用iisreset
    私はいくつかのことを試しました。私が最初に試したのはiisresetでしたが、私のasp.netアプリはパスの変更を検出しませんでした。気が狂っていないことを確認するために、サーバーを再起動してみました。これは動作しました:アプリは新しいPATHを取得します。

    ASP.NETアプリケーションでPATHを変更したいという理由だけで、マシン全体を再起動する必要をなくす方法があるかどうか知りたいです...

    もう1つ考えられるのは、他の質問を誤解したことです(「recycleiis」と言ったときに、回答者はiisresetを意味していました)。それは、私の状況でiisresetが機能せず、サーバーを再起動した理由を説明していません。不足しているiisresetのオプションはありますか?

  • インターウェブの検索
    私も解決策を探してみました。私から 最初の検索 私のPATHの問題については、実際の情報は得られませんでした(前述の質問を除く)。私の 2番目の検索セット リサイクルについてIISプロセスがうまく機能しません:iisresetとそれがどのようにリサイクルされるかについての情報を取得しますワーカープロセス

  • W3SVCの再起動
    回答者はW3SVCの再起動を提案しました (「ワールドワイドウェブパブリッシングサービス」)、これは有望に見えましたが、私にとっても機能しませんでした(ただし、機能する可能性があります!) 。パスを変更し、freshコマンドプロンプトを使用して変更が行われたことを確認し、W3SVCを再起動してその提案を試しました。ASP.NETアプリケーションにサイコロはありません。再起動後も、新しいコマンドプロンプトに変更されたパスが表示され、アプリケーションにも変更が表示されます(したがって、変更自体は実際には私が望んでいたものでした)。

    別の 回答者が同様のことを提案しました 、1つの重要な違いがあります:サービスを少し停止したままにし、その間にサイトが利用できないことを確認します(実際にIIS =そのサイトにサービスを提供する)。これは私にとっても同じ結果でした。

  • 正しいIISプロセスを強制終了する)==脚注として、私が検討した最後の代替策の1つは、iisのsvchostプロセスを強制終了することです。これはかなり野蛮な解決策のようです。これを試し、「svchost.exe -k iissvcs」を強制終了しましたが、これも機能しませんでした。しかし、間違ったプロセスを強制終了しただけかもしれません。

  • AppPool設定の変更
    私のアプリのアプリケーションプールには、デフォルト以外の設定「Load User Profile = False」がNetworkServiceIDで実行されていました。設定が何をするのか(インラインの説明を読んだ後でも)わかりませんが、アプリで見られるように、それがPATH変数に何らかの影響を及ぼしたと想像できました。残念ながら、それをTrueに設定しても何も解決されませんでした。

それらが重要であるという場合に備えて、いくつかの最終的な詳細を追加します。私のシナリオでは、次の行に沿った何かでbcp.exeを開始しようとしています。

using (var process = new Process()) 
{
    process.StartInfo.FileName = "bcp.exe";
    process.StartInfo.Arguments = myArguments;
    process.StartInfo.UseShellExecute = false;
    process.Start();
    // Code to handle the process exiting and use the output.
}

BCPバージョン11が必要ですが、サーバーボックスにはバージョン10がありました。このツールにはスタンドアロンのインストーラーがあり、PATHに次の重要なビットを追加します。

  • C:\Program Files\Microsoft SQL Server\110\Tools\Binn
  • C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\
3
Jeroen

不可能だよ。

最新のすべてのOS(afaik)では、環境変数は親プロセス(ログインプロセスまで)から継承されます。変数を変更する場合は、プロセスが実行されているセッションが再開されていることを確認する必要があります(ログオフとオンの種類)。

IISはservices.exeに基づいているため、再起動せずに実際に実行することはできません(services.exeの強制終了は冗長です)。

これが それについてのKB です。

3
Nitz

私はちょうど今同じ問題に遭遇し、Nitzからの回答にリンクされているKB記事を読みました。その記事では「ローカルシステム」として実行されているプロセスについて具体的に言及しているため、これがきっかけとなりました。私の場合、特定のユーザーアカウントでアプリプールを実行し(構成ファイルにパスワードなしでSQL Serverにログインできるようにします)、アプリプールに「ユーザープロファイルの読み込み」という設定があり、デフォルトは「false」であることがわかりました。その設定をtrueに設定すると、アプリプールをリサイクルすることでうまくいくようです。

したがって、「ローカルシステム」とは異なるユーザーでアプリプールを実行できる場合は、これで問題が解決する可能性があります。

0

iisresetが実際に機能しない場合は、W3SVCサービスを再起動してみてください(services.msc)。これは基本的にIISの完全な再起動です。

0
MichelZ