2

データベースのエラーをチェックする Windows サービスを作成しました。特定のエラーが表示された場合は、IISRESETコマンドを実行します。

問題は、昇格された特権なしで IISRESET コマンドを実行すると、実際にはリセットされないことです。したがって、コードで必要なすべてを実行できますが、IISRESETコマンドが管理者として実行されているかどうかはわかりません。また、それを確認する方法もわかりません。

ここに私が持っているコードがあります

        ErrorCheckerEventLog.WriteEntry("Performing IISReset", EventLogEntryType.Warning);
        Process process = new Process();
        process.StartInfo.Verb = "runas";
        process.StartInfo.FileName = "iisreset.exe";
        process.StartInfo.UseShellExecute = true;
        process.StartInfo.CreateNoWindow = false;
        process.StartInfo.RedirectStandardError = false;
        process.StartInfo.RedirectStandardOutput = false;
        process.Start();
        process.WaitForExit();
        ErrorCheckerEventLog.WriteEntry("IISReset finished", EventLogEntryType.Information);

アプリケーション イベント ログには、次の情報が表示されます。

リスナー アダプタ プロトコル 'net.tcp' が Windows プロセス アクティブ化サービスに正常に接続されました。

リスナー アダプター プロトコル 'net.pipe' が Windows プロセス アクティベーション サービスに正常に接続されました。

システム イベント ログには、次の情報が記録されています。

ユーザー testing\neil.kenny から IIS 開始コマンドを受け取りました。ログに記録されたデータはステータス コードです。

私にはすべて問題ないように見えますが、実際にリセットされたかどうかはまだわかりません。iisreset コマンドを実行しただけで、アクセス拒否メッセージが出力された可能性があります。

これを正しく確認するにはどうすればよいですか?

4

2 に答える 2

3

手動でテストしたい場合:

  • 最初に頭に浮かぶのは、IIS 上の任意のサイトがリセットされた状態でブラウザーを開いたままにすることです。F5 を常に押します。サイトはダウンし、すぐに再びアップします。
  • イベント ビューアをチェックインし、IIS が再起動されたことを示すイベント エントリを探します (システムログをチェックします)。この質問が役立つかもしれません。ここに写真があります。1 つの画像は千の言葉よりも優れています。

ここに画像の説明を入力

正確に何を探すべきか:

  • 一部のサービスが停止したことを示すいくつかのイベント。ソースはサービス コントロール マネージャーです。その中で、 「World Wide Web Publishing Service が停止状態になりました」と表示されているものを探します。
  • ソース IIS-IISReset からのイベントで、内容は「IIS stop command received from user xxxx」です。
  • 一部のサービスが開始されたことを示すいくつかのイベント。ソースはサービス コントロール マネージャーです。その中で、 「World Wide Web Publishing Service が実行状態になりました」というメッセージを探します。
  • ソース IIS-IISReset からのイベントで、内容は「IIS start command received from user xxxx」です。
于 2013-04-03T08:36:42.473 に答える
0

ちょっと考えてみてください...要件に応じて、次のようなことができます...

1. 何かをアプリケーション状態にするために作成した iis インスタンスでホストされているサイトに存在する Web ページまたは wcf エンドポイントを呼び出します。

2. コードを実行します。

3. iisreset が原因でアプリがリロードされた可能性があり、null で時間がかかる場合は、アプリケーション変数を取得するように指示する params を使用して再度呼び出します。

あなたのコードがボックスでホストされているアプリとは何の関係もない場合は理想的ではないので、私は考えました...なぜそのイベントログ情報を取得しないのでしょうか?

これにはその例があります: Read event log in C# ... 質問、確かに非常に単純なものですが、非常に最近の特定の期間を調べており、ログは最新のものから読み取られているため、検索がレンダリングされます非常に高速です (たとえば、最もビジーなサーバーで 100 個のイベントを上位に表示する必要があります)。

于 2013-04-03T08:35:47.240 に答える