首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServiceController.start()和ServiceController.stop()正在抛出异常吗?

ServiceController.start()和ServiceController.stop()正在抛出异常吗?
EN

Stack Overflow用户
提问于 2011-02-22 21:58:30
回答 5查看 3.8K关注 0票数 3

下面的代码将引发异常。我不明白我在代码中犯了什么错误。谁能帮我弄清楚。我认为这是一些担保权问题。如果是这样,我如何将安全权限授予任何用户或应用程序,以便以编程方式访问此windows服务?

代码语言:javascript
复制
Dim sc As New ServiceController        
sc.ServiceName = "DataLoad"   
If sc.Status = ServiceControllerStatus.Stopped Then     
    sc.Start()    
Else  
    sc.Stop()  
End If

异常

代码语言:javascript
复制
System.InvalidOperationException: Cannot open DataLoad service on computer '.'. --->
System.ComponentModel.Win32Exception: Access is denied --- End of inner exception stack trace --- at
System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess) at
System.ServiceProcess.ServiceController.Start(String[] args) at
System.ServiceProcess.ServiceController.Start() at
WEBSITE.DataLoad.Submit1_ServerClick(Object sender, EventArgs e) in C:\Inetpub\wwwroot\WEBSITE\a\DataLoad.aspx.vb:line 46

谢谢!

EN

回答 5

Stack Overflow用户

发布于 2011-02-22 22:06:58

为此,可以使用subinacl工具。

代码语言:javascript
复制
SUBINACL /SERVICE \\MachineName\ServiceName /GRANT=[DomainName\]UserName[=Access] 

对你的案子要特别注意:

代码语言:javascript
复制
subinacl /service DataLoad /GRANT=YOURDOMAIN\[User in appdomain for WEBSITE]=TO

其中TO的意思是

代码语言:javascript
复制
T : Start Service
代码语言:javascript
复制
O : Stop Service

所有可供选择的准入办法如下:

F:全面控制

代码语言:javascript
复制
R : Generic Read
代码语言:javascript
复制
W : Generic Write
代码语言:javascript
复制
X : Generic eXecute
代码语言:javascript
复制
L : Read controL
代码语言:javascript
复制
Q : Query Service Configuration
代码语言:javascript
复制
S : Query Service Status
代码语言:javascript
复制
E : Enumerate Dependent Services
代码语言:javascript
复制
C : Service Change Configuration
代码语言:javascript
复制
T : Start Service
代码语言:javascript
复制
O : Stop Service
代码语言:javascript
复制
P : Pause/Continue Service
代码语言:javascript
复制
I : Interrogate Service
代码语言:javascript
复制
U : Service User-Defined Control Commands  

请参阅本文中的方法3

票数 2
EN

Stack Overflow用户

发布于 2013-06-27 21:55:57

我找到了解决此问题的方法,方法是在ServiceController重载构造函数中提供当前正在执行服务的机器名称,该构造函数使用2(2个)参数,即公共ServiceController(/my服务的名称字符串/,System.Environment. machine /此机器正在执行服务/)。

对此解决方案进行测试的.Net版本为4.5,希望这有助于仍在寻找解决方案的任何人。

下面是您需要在代码中做的事情:

代码语言:javascript
复制
ServiceController serviceController = new ServiceController("myServiceName", System.Environment.MachineName);
票数 1
EN

Stack Overflow用户

发布于 2013-11-08 13:11:55

GetServiceHandle需要一些访问权限。如果您以管理员用户的身份运行它,而不是作为普通用户运行它,那么本文可能会有所帮助。

它清楚地展示了如何手动授予Windows用户启动和停止服务的权限(或设置其他权限):

http://thommck.wordpress.com/2011/12/02/how-to-allow-non-admins-to-start-and-stop-system-services/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5084493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档