2012-09-13 37 views
0

停止Windows服务在C#编程停止Windows服务产生以下所列System.InvalidOperationException通过程序

{访问被拒绝}

如果我开始/停止通过Windows接口,那么一切工作正常! 我是管理员用户,在Windows 7下运行该服务

+1

请插入您使用您的问题停止服务的代码。 –

+1

停止运行服务的程序是哪个帐户? –

+0

服务登录是什么类型的帐户? (显示在右边点进>场所SERVICES.MSC菜单) – HaemEternal

回答

0

这听起来像是一个UAC问题 - 试着运行应该以管理员身份控制服务的应用程序(右键单击“以管理员身份运行”)。

注意,即使管理员帐户没有完全权限,除非你明确地运行在管理员模式下的应用程序 - 这是介绍了在Windows Vista中保护用户免受恶意软件和一直存在至今。

+0

您好 我已经通过创建一个清单文件试过了UAC的做法,也很清楚,在Win 7连一个管理员用户作为标准用户处理除非直到有说运行为,但这种方法是其中用户干预开始停止服务 我想通过编程的方式停止服务 – prashant

+0

@prashant,好了,UAC的整点是为了防止软件做紧要之事(和停止服务时其中之一 - 停止某些防病毒服务的防火墙服务正在降低机器的安全性)。所以除非你的用户批准运行你的软件,否则它将不被允许控制服务。也就是说,您可以让服务自行停止,只需向您的服务发送一条“消息”,告诉它自行关闭。 – Lucero

+0

我没有得到你的最后一句话说 安全明智截至目前它的确定,因为它会在独立的服务器上执行。 “ ”您可以让服务自行停止,只需向您的服务发送一条“消息”,告诉它自行关闭“ – prashant

1

我不知道你是怎么想阻止它,但现在我想这在我的系统上,而这种做法至少正常工作:

var p = Process.Start(new ProcessStartInfo 
     { 
      FileName = "net", 
      Arguments = "stop NameOfService", 
      CreateNoWindow = true, 
      WindowStyle = ProcessWindowStyle.Hidden 
     }); 
p.WaitForExit(); //add this line if you want to make sure that the service is stopped before your program execution continues 
+0

您的Visual Studio是否在Admininstrator模式下运行?因为我的'net start' /'net stop'确实需要UAC批准。 – Lucero

+0

一旦服务部署,它运行良好,但是当servicecontroller .stop命令执行时,我得到异常System.InvalidOperationException 服务需要在预定义的时间每天执行,这就是为什么我想要停止它一旦必要的过程完成 – prashant

+0

@Lucero - 是的,我的VS在管理员模式下运行。 –

0

如果身份验证问题...

您可以通过编程控制从你正在做的东西与用户,使用

WindowsIdentity 

[DllImport("advapi32.dll", SetLastError = true)] 
private static extern bool LogonUser(...) 

我不知道是否会工作,但它可能是值得一试。

IntPtr token IntPtr.Zero; 
LogonUser(username, password ..., ref token) //and some other parameters 
var identity = WindowsIdentity(token); 

using(identity.Impersonate()) 
{ 
    //do stuff here using another identity 
    //find service and stop it 
} 

编辑:这可用于远程服务器上的身份验证。

+0

我可能不会选择冒充,am使用一个外部的.bat文件来停止并启动服务,而不是通过编程来解决问题,并解决了我的目的! 谢谢! – prashant

+0

是的,我发现之前,我仍然想分享这个方法,但他人。 –