通过程序停止Windows服务

时间:2012-09-13 09:57:18

标签: c# windows-services system

以编程方式停止c#中的Windows服务会生成以下列出的System.InvalidOperationException

{访问被拒绝}

如果我通过Windows界面启动/停止,那么一切正常! 我是管理员用户并在Windows 7下运行该服务

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

请注意,即使管理员帐户没有完全权限,除非您以管理员模式显式运行应用程序 - 这是为了保护用户免受Windows Vista中的恶意软件的侵害,并且从那时起一直存在。

答案 2 :(得分: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
}

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