停止Windows服务在C#编程停止Windows服务产生以下所列System.InvalidOperationException
通过程序
{访问被拒绝}
如果我开始/停止通过Windows接口,那么一切工作正常! 我是管理员用户,在Windows 7下运行该服务
停止Windows服务在C#编程停止Windows服务产生以下所列System.InvalidOperationException
通过程序
{访问被拒绝}
如果我开始/停止通过Windows接口,那么一切工作正常! 我是管理员用户,在Windows 7下运行该服务
这听起来像是一个UAC问题 - 试着运行应该以管理员身份控制服务的应用程序(右键单击“以管理员身份运行”)。
注意,即使管理员帐户没有完全权限,除非你明确地运行在管理员模式下的应用程序 - 这是介绍了在Windows Vista中保护用户免受恶意软件和一直存在至今。
您好 我已经通过创建一个清单文件试过了UAC的做法,也很清楚,在Win 7连一个管理员用户作为标准用户处理除非直到有说运行为,但这种方法是其中用户干预开始停止服务 我想通过编程的方式停止服务 – prashant
@prashant,好了,UAC的整点是为了防止软件做紧要之事(和停止服务时其中之一 - 停止某些防病毒服务的防火墙服务正在降低机器的安全性)。所以除非你的用户批准运行你的软件,否则它将不被允许控制服务。也就是说,您可以让服务自行停止,只需向您的服务发送一条“消息”,告诉它自行关闭。 – Lucero
我没有得到你的最后一句话说 安全明智截至目前它的确定,因为它会在独立的服务器上执行。 “ ”您可以让服务自行停止,只需向您的服务发送一条“消息”,告诉它自行关闭“ – prashant
我不知道你是怎么想阻止它,但现在我想这在我的系统上,而这种做法至少正常工作:
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
如果身份验证问题...
您可以通过编程控制从你正在做的东西与用户,使用
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
}
编辑:这可用于远程服务器上的身份验证。
我可能不会选择冒充,am使用一个外部的.bat文件来停止并启动服务,而不是通过编程来解决问题,并解决了我的目的! 谢谢! – prashant
是的,我发现之前,我仍然想分享这个方法,但他人。 –
请插入您使用您的问题停止服务的代码。 –
停止运行服务的程序是哪个帐户? –
服务登录是什么类型的帐户? (显示在右边点进>场所SERVICES.MSC菜单) – HaemEternal