我需要能够通过可以从第三方软件调用的exe关闭服务,所以我想我会使用C#快速解决问题。
我正在尝试使用我在网上找到的以下代码来停止服务,但它不会工作,除非我以管理员身份运行exe(理想情况下我不想这样做,因为我试图将此作为一个光滑)
public static void StopService(string serviceName, int timeoutMilliseconds)
{
ServiceController service = new ServiceController(serviceName);
service.MachineName = ".";
try
{
TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
}
catch
{
// ...
}
}
有没有办法解决需要提升的问题?
答案 0 :(得分:4)
各个服务上都有访问控制列表。您可以向特定用户或组授予权限,以便能够关闭/加注特定服务。您可以使用cmd行工具“subinacl”来设置Microsoft的acl:http://www.microsoft.com/download/en/details.aspx?id=23510 请注意,您可以授予关闭服务的权限,而无需授予查询服务配置的权限。
答案 1 :(得分:2)
以这种方式思考:整个安全问题是什么,如果有办法解决它?
所以,不。除非服务在同一帐户下运行,否则不应允许您停止服务。
如果我是病毒,我会做的第一件事是什么?使用“需要提升的方法”停止病毒扫描服务。
答案 2 :(得分:1)
您可以安装自己的“Stopper-Service”,它与专用的.exe文件或任何知道如何与该服务通信的应用程序进行通信(例如,通过命名管道)。
所以你的所有app / .exe都发出了这个服务的信号,它必须停止/重启等特定服务。
如果您只想停止自己的服务,可以考虑集成此类消息传递功能,这样您就可以在没有管理员权限的情况下进行控制。
当然,您必须实施足够的安全机制,以确保只有授权的应用程序才能获得控制权。
希望这有帮助。