我有一个网站,它启用了Windows身份验证。从网站的一个页面,用户可以启动一个服务来处理数据库中的某些内容。.Net 2.0 ServiceController.GetServices()
它对我启动服务很好,因为我是服务器上的本地管理员。但我只是让用户测试它,并且他们无法启动服务。
我的问题是:
有谁知道的方式,通过名称中使用不同的Windows帐户比他们目前正在与登录的一个来获得指定的计算机上的服务列表?
我真的不希望添加所有需要启动该服务为Windows组,并将它们全部设置为我的IIS服务器上的本地管理员的用户.....
下面是我得到的一些代码:
public static ServiceControllerStatus FindService()
{
ServiceControllerStatus status = ServiceControllerStatus.Stopped;
try
{
string machineName = ConfigurationManager.AppSettings["ServiceMachineName"];
ServiceController[] services = ServiceController.GetServices(machineName);
string serviceName = ConfigurationManager.AppSettings["ServiceName"].ToLower();
foreach (ServiceController service in services)
{
if (service.ServiceName.ToLower() == serviceName)
{
status = service.Status;
break;
}
}
}
catch(Exception ex)
{
status = ServiceControllerStatus.Stopped;
SaveError(ex, "Utilities - FindService()");
}
return status;
}
我的例外来自try块中的第二行。这里的错误:
System.InvalidOperationException: Cannot open Service Control Manager on computer 'server.domain.com'. This operation might require other privileges. ---> System.ComponentModel.Win32Exception: Access is denied --- End of inner exception stack trace --- at System.ServiceProcess.ServiceController.GetDataBaseHandleWithAccess(String machineName, Int32 serviceControlManaqerAccess) at System.ServiceProcess.ServiceController.GetServicesOfType(String machineName, Int32 serviceType) at TelemarketingWebSite.Utilities.StartService()
感谢您的帮助/信息
我必须有Windows用户名,因为我根据自己的Windows登录显示的网站的东西。我不想让用户有一个额外的登录。 – Miles 2008-10-17 15:30:58
您可以继续使用他们的Windows帐户进行身份验证。我假设你在IIS和ASP.NET身份验证模型中使用集成身份验证。 ()。您可以一起使用两者,并且IIS仍将协商用户凭据,而无需其他登录。 –
Rich
2008-10-17 22:34:57