2011-07-08 158 views
4

我使用visual studio创建了一个C#Web服务来停止称为SMTPSVC的Windows服务“简单邮件传输协议(SMTP)”。尝试停止C#Windows服务时访问被拒绝

以下是Web方法来做到这一点:

[WebMethod] 
public string StopService() 
{ 
    String status = ""; 
    try 
    { 
     ServiceController scAlerter = new ServiceController("SMTPSVC"); 

     Console.WriteLine(scAlerter.DisplayName); 
     Console.WriteLine(scAlerter.CanStop); 

     scAlerter.Stop(); 
     Console.WriteLine("Service stopped"); 
     status = "STOPPED"; 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("Exception caught here" + e.ToString()); 
     status = "Exception" + e.ToString(); 
    } 
    return status; 
} 

我在IIS 5.1服务器发布此Web服务。当我调用它抛出以下“拒绝访问”的服务异常

<?xml version="1.0" encoding="utf-8" ?> 
<string xmlns="http://y-square.org/"> 
    ExceptionSystem.InvalidOperationException: Cannot open SMTPSVC 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.Stop() at Service.RestartService() 
    in c:\Inetpub\wwwroot\RestartService\App_Code\Service.cs:line 38 
</string> 

默认情况下,该服务使用的用户帐户IUSER_system-name进入系统管理员组我已经加入该用户帐户,并添加ASPNET用户帐户管理员组。

我能够成功停止/从C#独立程序启动此Windows服务。

您能否让我知道是什么问题?我需要更改任何权限设置或IIS用户访问权限才能运行此权限?

也让我知道这个C#服务将用于停止Windows服务的用户帐户?

非常感谢您的帮助。

由于提前, 瑜珈

回答

5

的IUSER_machinename(IUSER简称,以下相同)帐户,有充分的理由,相对有限的帐户,很少有超过来宾帐户更多的权限。不允许启动和停止Windows服务,甚至不允许询问它们(以获取其状态等)。
当在独立EXE环境中运行时,上述逻辑成功,因为底层帐户[很可能]您可能是管理员组的成员,或者无论如何是相当强大的帐户。

很容易,但未建议出路这种情况,就是给予IUSER帐户更多权限。只要尝试将此帐户添加到管理员组,即bam !,它将起作用(但也会引入一些潜在的危险安全漏洞)。
A 更好的方法旨在制定将允许通过IIS管理的特定Windows服务的明确列表,并将其各自的服务安全描述符设置为使IUSER帐户(或创建的其他帐户/组根据需要)被允许开始和/或停止它们。
实现这种方法的困难在于,据我所知,没有GUI或直观的管理工具来检查和更改服务的安全描述符:您需要使用sd并“学习”SDDL语言。这里有几个指针的回复这样做

+0

谢谢, 我曾尝试加入IUSER帐户进入系统中使用控制面板/用户管理员组帐户应用程序,但我仍然得到同样的例外。我需要在IIS服务器上进行任何其他配置吗?像虚拟目录属性等 – Yogi

+0

@Yogi。我忙于工作,无法访问Windows机器来检查内容。我仍然认为这是一个问题许可和/或安全策略设置。出于诊断目的,临时使IIS使用将代码作为独立应用运行以代替IUSER帐户时使用的帐户,并查看是否可行。您也可以将此问题指向http://serverfault.com QA站点,因为系统管理员可以更好地帮助确定似乎是配置问题而不是代码问题。 – mjv

+0

@mfv:今天开始工作,因为我的系统重新启动后,IUSR帐户添加到管理员组。 非常感谢您的帮助 干杯, Yogi – Yogi

相关问题