Mar*_*ark 20 c# service controls windows-7
我正在尝试编写一个应用程序和服务来监视一组给定的服务,并且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();
}
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
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:
Run Code Online (Sandbox Code Playgroud)
我试图冒充用户,我试图从另一个作为系统服务运行的服务中执行相同的代码.这些都没有真正能够影响服务.如果它开始了,我无法阻止它.如果它停止了,我无法启动它.我知道这都与权限有关我只是没有找到实际上让我控制服务的机制.
任何帮助将不胜感激.
小智 11
诊断:
UAC确实是问题所在.您的应用需要提升用户权限.这就是为什么"以管理员身份运行"在IDE之外工作的原因.
有些网站建议禁用UAC.由于这在我的环境中不可能,我决定通过代码请求提升用户权限.维基百科提供了我需要的帮助."请求提升"部分提供了解决方案.
简而言之:
编辑应用程序清单文件以反映您的要求.
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个选项作为评论部分的一部分.
DxC*_*xCK 10
我认为这是UAC错误...尝试右键单击并以"以管理员身份运行"运行exe.如果这有帮助,您可能希望使用level ="requireAdministrator"将Manifest文件添加到可执行项目中.
归档时间: |
|
查看次数: |
20135 次 |
最近记录: |