一个窗口服务试图启动另一个:访问被拒绝
本文关键字:另一个 启动 访问 拒绝 一个 服务 窗口 | 更新日期: 2023-09-27 18:01:38
我在生产服务器上运行Windows服务。非常重要的是,如果服务因任何原因崩溃,我们可以立即恢复,所以我编写了一个监视器服务,其唯一目的是不断检查主服务是否启动并运行,如果不是,则发出求救信号。它还应该启动关闭的服务……这是不工作的部分:
public static void CheckService(string checkServiceName, string myServiceName, bool restartIfStopped = false)
{
var ctl = ServiceController.GetServices()
.FirstOrDefault(s => s.ServiceName == checkServiceName);
var error = "";
if (ctl == null)
error = "{0} is not installed!".Fmt(checkServiceName);
else if (ctl.Status != ServiceControllerStatus.Running)
{
error = "{0} is in status {1}".Fmt(checkServiceName, ctl.Status);
if (restartIfStopped)
try
{
ctl.Start();
// no error = success
error += "'r'nService was automatically restarted.";
}
catch (Exception ex)
{
// send to windows application log
Log("Failed to restart service:'r'n"+ex, myServiceName, EventLogEntryType.Warning);
}
}
// other code here to send out email notifications
}
问题是,当我尝试用ctl.Start()
重新启动服务时,它会在应用程序日志中出现以下错误:
重启服务失败:
系统。无法在计算机'.'上打开MyService服务。——比;System.ComponentModel。Win32Exception: Access is denied
两个服务都设置为使用"网络服务"运行。我已授予"网络服务"完全安全权限。
还有什么可能导致这种情况?
您可以设置服务在出现故障时重新启动(如下所述)。
看起来像是一个行政许可。
我会尝试两件事
-
将应用程序清单添加到解决方案中,详细信息请参阅:http://www.codeproject.com/Questions/629067/How-to-add-a-manifest-file-in-my-project
-
给予Manual权限
转到c://Program Files/ApplicationFolder/.exe右键单击。exe,转到属性,然后转到兼容性选项卡并勾选true以管理员级别运行此程序