【问题标题】:Stop/Start service in code in Windows 7在 Windows 7 中的代码中停止/启动服务
【发布时间】:2009-10-09 18:27:40
【问题描述】:

我正在尝试编写一个应用程序和服务来监视一组给定的服务,并且 a) 确保它们正在运行 b) 根据某些标准,根据需要重新启动它们。

我一直遇到拒绝访问错误。

如果我只是遍历系统上的进程,找到我想要的那个:

foreach (ServiceController sc in ServiceController.GetServices())
   {                
       if(sc.ServiceName == "MyServiceName")
       {
            sc.Stop();
            sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 60));
            sc.Start(); 
       }            
   }   

我明白了:

InnerException: System.InvalidOperationException
        Message="Cannot open My Service service on computer '.'."
        Source="System.ServiceProcess"
        StackTrace:
             at System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess)
             at System.ServiceProcess.ServiceController.Stop()
             at lib.ListServices() in D:\lib.cs:line 552
             at lib.Init() in D:\lib.cs:line 56
   InnerException: System.ComponentModel.Win32Exception
             Message="Access is denied"
             ErrorCode=-2147467259
             NativeErrorCode=5
             InnerException: 

我试图模拟一个用户,我试图从另一个作为系统服务运行的服务中执行相同的代码。这两者实际上都无法影响服务。如果它开始了,我无法阻止它。如果它停止了,我将无法启动它。我知道这都与权限有关我只是没有找到真正让我控制服务的机制。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# windows-7 controls service


    【解决方案1】:

    诊断:


    UAC 确实是问题所在。您的应用程序需要提升的用户权限。这就是“以管理员身份运行”在 IDE 之外工作的原因。

    一些网站建议禁用 UAC。由于这在我的环境中是不可能的,我决定通过代码请求提升的用户权限。 Wikipedia 提供了我需要的帮助。 “请求提升”部分提供了解决方案。

    简而言之解决方案:


    编辑您的应用程序清单文件以反映您的要求。


    1.1。右键单击您的项目
    1.2.点击“属性”
    1.3.选择“应用程序”选项卡 - 默认页面
    1.4.单击“查看 UAC 设置” - 此按钮打开应用程序清单文件 (app.manifest)
    1.5。查找“UAC 清单选项”部分
    1.6.删除或评论当前条目 - {requestedExecutionLevel level="asInvoker" uiAccess="false"}
    1.7.更改为 {requestedExecutionLevel level="requireAdministrator" uiAccess="false"}。 MS 提供您的 3 个选项作为部分注释的一部分。

    【讨论】:

      【解决方案2】:

      我认为这是 UAC 故障... 尝试通过右键单击并“以管理员身份运行”来运行 exe。 如果这有帮助,您可能希望使用 level="requireAdministrator" 将清单文件添加到您的可执行项目中。

      【讨论】:

        【解决方案3】:

        是否是 .net 安全策略阻止您的应用控制服务?

        根据MSDN,您的程序集需要完全信任才能正常工作。

        【讨论】:

          【解决方案4】:

          您必须将应用程序设置为以管理员身份运行。如果您在文件属性菜单下查看。在兼容性选项卡上,有一个权限级别选项,让程序以管理员身份运行。它适用于我自己在 Windows 7 中的系统托盘。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-08-11
            • 2013-09-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-05
            相关资源
            最近更新 更多