当 start/stop Windows 服务与 ASP 时访问被拒绝
Access is denied when start/stop Windows Service with ASP
我编写了一个 ASP.NET Web 应用程序,它显示了我们产品的所有已安装服务。我的应用程序可以检索服务状态(运行、已停止、...)。
此外,我的应用程序应该能够启动已停止的服务并停止 运行 服务。在我的本地机器上它工作,在它不在服务器上。目前我将网络应用程序配置为使用管理员,但它没有启动。
事件查看器显示访问被拒绝:
Process information:
Process ID: 5348
Process name: w3wp.exe
Account name: IIS APPPOOL\ServiceManager
Exception information:
Exception type: Win32Exception
Exception message: Access is denied
Request information:
Request URL: http://X/ServiceMonitor/StopService/25
Request path: /ServiceMonitor/StopService/25
User host address: X
User:
Is authenticated: False
Authentication Type:
Thread account name: X\Administrator
Thread information:
Thread ID: 23
Thread account name: X\Administrator
Is impersonating: False
Stack trace:
知道我错过了什么吗?
作为附加信息,这里是我的 StartService 函数。但应该不是问题,因为它可以在我的本地机器上运行:
public bool StartService()
{
ServiceController service = new ServiceController(_serviceName,_machineName);
if (!new[] { ServiceControllerStatus.Running, ServiceControllerStatus.StartPending }.Contains(service.Status))
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromMinutes(2));
return service.Status == ServiceControllerStatus.Running;
}
iis 用户或 iis 应用程序池没有足够的权限启动或停止 windows 服务。所以你需要将iusr,iis_iusrs或APPPOOL\ServiceManager添加到admin组,这样你才能访问windows服务。这种方式很简单,但是不推荐的方式。另一种方法是使用具有足够权限访问 windows 服务的帐户并在 iis 应用程序池自定义帐户中设置。您可以在应用程序池高级设置下找到此设置。
我编写了一个 ASP.NET Web 应用程序,它显示了我们产品的所有已安装服务。我的应用程序可以检索服务状态(运行、已停止、...)。
此外,我的应用程序应该能够启动已停止的服务并停止 运行 服务。在我的本地机器上它工作,在它不在服务器上。目前我将网络应用程序配置为使用管理员,但它没有启动。 事件查看器显示访问被拒绝:
Process information:
Process ID: 5348
Process name: w3wp.exe
Account name: IIS APPPOOL\ServiceManager
Exception information:
Exception type: Win32Exception
Exception message: Access is denied
Request information:
Request URL: http://X/ServiceMonitor/StopService/25
Request path: /ServiceMonitor/StopService/25
User host address: X
User:
Is authenticated: False
Authentication Type:
Thread account name: X\Administrator
Thread information:
Thread ID: 23
Thread account name: X\Administrator
Is impersonating: False
Stack trace:
知道我错过了什么吗?
作为附加信息,这里是我的 StartService 函数。但应该不是问题,因为它可以在我的本地机器上运行:
public bool StartService()
{
ServiceController service = new ServiceController(_serviceName,_machineName);
if (!new[] { ServiceControllerStatus.Running, ServiceControllerStatus.StartPending }.Contains(service.Status))
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromMinutes(2));
return service.Status == ServiceControllerStatus.Running;
}
iis 用户或 iis 应用程序池没有足够的权限启动或停止 windows 服务。所以你需要将iusr,iis_iusrs或APPPOOL\ServiceManager添加到admin组,这样你才能访问windows服务。这种方式很简单,但是不推荐的方式。另一种方法是使用具有足够权限访问 windows 服务的帐户并在 iis 应用程序池自定义帐户中设置。您可以在应用程序池高级设置下找到此设置。