我创建了一项 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);
在应用程序事件日志中我得到这些:
Listener Adapter protocol 'net.tcp' successfully connected to Windows Process Activation Service.
Listener Adapter protocol 'net.pipe' successfully connected to Windows Process Activation Service.
在系统事件日志中我得到这些:
IIS start command received from user testing\neil.kenny. The logged data is the status code.
这对我来说看起来不错,但我仍然不确定它是否真的进行了重置。它可能只是运行 iisreset 命令,然后输出访问被拒绝的消息。
如何正确验证这一点?
最佳答案
如果您想手动测试:
- 我首先想到的是保持浏览器打开并重置 IIS 上的任何站点。一直按 F5。网站将关闭,很快就会再次启动。
- 检查事件查看器并查找指示 IIS 已重新启动的事件条目(检查系统日志)。这个question可能有帮助。这里有一张照片。一图胜千言:
到底要寻找什么:
- 多个事件表明某些服务已停止。来源是服务控制管理器。其中查找“万维网发布服务进入停止状态”
- 来自源 IIS-IISReset 的事件,内容为“从用户 xxxx 收到 IIS 停止命令”
- 多个事件表明某些服务已启动。来源是服务控制管理器。其中查找“万维网发布服务已进入运行状态”
- 来自源 IIS-IISReset 的事件,内容为“从用户 xxxx 收到 IIS 启动命令”
关于c# - 如何验证我的 C# 代码在管理员模式下运行 IISRESET 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15782151/