我将Windows服务“Service1”配置为以“本地服务”身份登录。
我构建了一个控制台应用程序来以编程方式启动它。
var service = new ServiceController("Service1");
service.Start();
我知道如果我从管理员命令提示符运行ConsoleApplication1,它会顺利启动。
如果我在没有抬高的情况下运行它,我会得到:
发生了系统错误5。
访问被拒绝。
但是,我需要在没有提升的情况下启动。
是否有可能,或者我必须改变实现这一目标的方式?
答案 0 :(得分:9)
您可以为服务本身设置ACL以允许此操作。 SetACL.exe utility使这(有点)直截了当; e.g:
SetACL.exe -on "MyService" -ot srv -actn ace -ace "n:S-1-5-32-545;p:start_stop"
这允许Users组的成员(S-1-5-32-545)启动和停止MyService。
答案 1 :(得分:2)
我跟着torak link,我理解这项关于服务权利的关键区别:
因此,要启动该服务,我需要修改服务控制权限。
好吧,我做了一个名为Service1的Windows服务,我用WIX做了一个安装程序。 在设置过程中,我致电ServiceInstall
<ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes"
Name="Service1" DisplayName="Service1"
Description="Service1 description"Start="demand"
Account="NT AUTHORITY\LocalService"
ErrorControl="ignore" Interactive="no" >
</ServiceInstall>
然后我有一个名为TestProgram的客户端程序,我尝试启动该服务:
var service = new ServiceController("Service1");
service.Start();
显然,如果没有提升TestProgram(在普通用户帐户下运行),它就无法启动服务。
因此,解决方案是指示WIX允许用户组的成员(例如)使用PermissionEx标记启动/停止服务:
<util:PermissionEx User="Users" ServiceStart="yes" ServiceStop="yes">
</util:PermissionEx>
希望这会有所帮助。谢谢大家。
答案 2 :(得分:2)
如果我可以加2美分,这是我的解决方案,不需要任何复杂的App.Manifest或Windows服务修改。
这个概念只是打电话给&#34; Net Start &#34;通过一个提升的过程:
public string StartServiceViaProcess(string param_strServiceName)
{
try
{
const int ERROR_CANCELLED = 1223; //The operation was canceled by the user.
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Verb = "runas";
startInfo.UseShellExecute = true;
startInfo.Arguments = "/C net start " + param_strServiceName;
process.StartInfo = startInfo;
try
{
Process.Start(startInfo);
}
catch (Win32Exception ex)
{
if (ex.NativeErrorCode == ERROR_CANCELLED)
return "L'usager a annulé la demande d'exécution avec privilège.";
else
throw;
}
}
catch (Exception ex)
{
return ex.SI_ConvertToString();
}
return "";
}
答案 3 :(得分:0)
我认为你不能这样做 - 我的理解是这是出于安全原因。允许恶意软件自动提升自身会有问题。
答案 4 :(得分:0)
This是我关注的链接并解决了我的问题。
如何授予非管理员管理服务的权利
默认情况下,普通用户没有系统管理员权限 无法管理Windows服务。这意味着他们无法停止,开始 或更改此类服务的设置或权限。在一些 例如,用户必须具有重新启动或权限 管理某些服务。在本文中,我们将考虑一些方法 管理Windows服务的权限。特别是,我们将展示如何 授予没有管理权限的标准用户权限 启动和停止特定服务...
没有简单方便的集成工具来管理服务 Windows中的权限。我们将考虑一些授予用户的方法 管理服务的权限......