我正在尝试在Windows Server 2003上启动Windows服务 从ASP.NET页面:
第35行的代码是:
32. Dim controller As New ServiceController
33. controller.MachineName = System.Environment.MachineName
34. controller.ServiceName = "WindowsServiceRealName"
35. controller.Start()
错误代码是
System.InvalidOperationException:无法在计算机“DARWIN”上打开WindowsServiceRealName服务。 ---> System.ComponentModel.Win32Exception:拒绝访问---内部异常堆栈跟踪结束---在System.ServiceProcess.ServiceController.Start(String [] args)的System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess)处。 ServiceProcess.ServiceController.Start()在E:\ ProjectsNet \ AfconParking \ AfconParking \ system \ Import.aspx.vb:第35行的AfconParking.Import.StartService()中
答案 0 :(得分:4)
用于ASP.NET应用程序池标识的帐户(默认情况下为“Network Service”)没有permissions required to start a service。
要解决此问题,您可以选择以下几种方法:
重新设计您的网站,不要求ASP.NET页面和服务控制管理器之间的交互。我真的想不出一个很好的理由要求这个(服务可以简单地在启动时启动,并保持运行:如果服务崩溃,你应该解决原因,和/或使用由提供的纠正措施SCM。如果需要重新启动服务以进行某种处理,请使用IPC机制(例如套接字或命名管道)在您的Web应用程序和服务之间进行通信。
使用适当的权限(基本上是本地Administrators组的成员身份)创建一个服务帐户,详细信息如here所述。请注意,这有几个安全隐患,其中没有一个特别好。
答案 1 :(得分:0)
服务具有访问控制列表(如文件等)。默认情况下,大多数普通和受限用户帐户(包括ASP.NET工作人员使用的默认帐户)无权控制或查看任何服务的状态。
您可以在允许IIS工作人员控制服务的服务上设置ACL,也可以使用已拥有权限的帐户运行Web应用程序。
后一种选择可能会给Web应用程序带来危险的访问级别(例如,如果Web用户发现安全漏洞会发生什么),但这是确认它是服务访问权限的快速方法。
设置ACL是更好的解决方案,但我认为没有用于设置ACL的UI(组策略除外)会使事情变得更难。您需要使用命令行工具(例如SUBINACL.exe)
答案 2 :(得分:0)
它是权限问题,尝试使用具有执行服务控制操作权限的标识运行应用程序池。
阅读此kb以了解如何授予用户此类权限: http://support.microsoft.com/kb/325349