【问题标题】:Can't run Windows service from ASP.NET page?无法从 ASP.NET 页面运行 Windows 服务?
【发布时间】:2009-12-20 11:26:39
【问题描述】:

我正在尝试在 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.GetServiceHandle(Int32 desiredAccess) 在 System.ServiceProcess.ServiceController.Start(String[] args ) 在 System.ServiceProcess.ServiceController.Start() at AfconParking.Import.StartService() 在 E:\ProjectsNet\AfconParking\AfconParking\system\Import.aspx.vb:line 35

【问题讨论】:

    标签: asp.net windows-server-2003


    【解决方案1】:

    用于标识 ASP.NET 应用程序池的帐户(默认为“Network Service”)没有permissions required to start a service

    要解决此问题,您有几个选择:

    1. 重新设计您的站点,使其不需要 ASP.NET 页面和服务控制管理器之间的交互。我真的想不出一个很好的理由来要求这个(服务可以简单地在启动时启动,并保持运行:如果服务崩溃,你应该修复它的原因,和/或使用提供的纠正措施SCM。如果需要重新启动服务来启动某种处理,请使用 IPC 机制(例如套接字或命名管道)在您的 Web 应用程序和服务之间进行通信)。

    2. 创建一个具有适当权限(基本上是本地管理员组的成员身份)的服务帐户,如详细所述here。请注意,这有几个安全隐患,没有一个特别好。

    【讨论】:

      【解决方案2】:

      这是一个权限问题,尝试使用有权执行服务控制操作的身份运行应用程序池。

      阅读此知识库以了解如何授予用户此类权限: http://support.microsoft.com/kb/325349

      【讨论】:

        【解决方案3】:

        服务具有访问控制列表(如文件等)。默认情况下,大多数普通和受限用户帐户(包括 ASP.NET 工作人员使用的默认帐户)无权控制或查看任何服务的状态。

        您可以在服务上设置允许 IIS 工作人员控制服务的 ACL,或者使用已经拥有权限的帐户运行 Web 应用程序。

        后一个选项可能会给 Web 应用程序提供危险级别的访问权限(例如,如果 Web 用户发现安全漏洞会发生什么情况),但可以快速确认它是服务访问权限。

        设置 ACL 是更好的解决方案,但我认为没有设置 ACL 的 UI(组策略除外),这会使事情变得更加困难。您需要使用命令行工具(例如SUBINACL.exe

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-15
          • 2011-04-17
          • 1970-01-01
          • 2012-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多