以编程方式停止c#中的Windows服务会生成以下列出的System.InvalidOperationException
{访问被拒绝}
如果我通过Windows界面启动/停止,那么一切正常! 我是管理员用户并在Windows 7下运行该服务
答案 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
}
编辑:这可以用于远程服务器上的身份验证。