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 已重新启动的事件条目(检查系统日志)。这个问题可能会有所帮助。在这里你有一张照片。一张图胜过千言万语:

在此处输入图像描述

究竟要寻找什么:

  • 几个事件表明某些服务已停止。来源是服务控制管理器。其中查找“万维网发布服务进入停止状态”
  • 来自源 IIS-IISReset 的事件,内容为“从用户 xxxx 收到 IIS 停止命令”
  • 几个事件表明一些服务已经启动。来源是服务控制管理器。其中查找“万维网发布服务进入运行状态”
  • 来自源 IIS-IISReset 的事件,内容为“从用户 xxxx 收到 IIS 启动命令”
于 2013-04-03T08:36:42.473 回答
0

只是一个想法...根据您的要求,您可以做类似...

1. 调用驻留在托管在您编写的 iis 实例上的站点上的网页或 wcf 端点,以便将某些内容置于应用程序状态。

2. 运行您的代码。

3. 用参数再次调用它,告诉它检索应用程序变量,如果它为 null 并且需要一段时间,该应用程序可能由于 iisreset 而重新加载。

如果您的代码与盒子上托管的应用程序无关,那就不理想了,那么我想……为什么不直接检索该事件日志信息呢?

有一个例子:Read event log in C# ...问题,诚然是一个非常简单的问题,但您正在查看一个最近的特定时间段,并从最近的时间读取日志,从而呈现您的搜索非常快(例如应该在最繁忙的服务器上的前 100 个事件中)。

于 2013-04-03T08:35:47.240 回答