Service 启动不带提升的windows服务

Service 启动不带提升的windows服务,service,elevated-privileges,Service,Elevated Privileges,我已将windows服务“Service1”配置为作为“本地服务”登录 我构建了一个控制台应用程序以编程方式启动它 var service = new ServiceController("Service1"); service.Start(); 我知道,如果从管理员命令提示符运行ConsoleApplication1,它将顺利启动 如果我在没有仰角的情况下运行它,我会得到: 发生系统错误5 访问被拒绝 但是,我需要在没有提升的情况下启动它

我已将windows服务“Service1”配置为作为“本地服务”登录

我构建了一个控制台应用程序以编程方式启动它

        var service = new ServiceController("Service1");
        service.Start();
我知道,如果从管理员命令提示符运行ConsoleApplication1,它将顺利启动

如果我在没有仰角的情况下运行它,我会得到:

发生系统错误5

访问被拒绝

但是,我需要在没有提升的情况下启动它


是否有可能,或者我必须改变实现这一点的方式?

我认为您无法做到这一点-据我所知,这是出于安全原因。允许恶意软件自动提升自身是有问题的。

您可以为服务本身设置ACL以允许此操作。这使得这(有些)简单明了;e、 g:

SetACL.exe -on "MyService" -ot srv -actn ace -ace "n:S-1-5-32-545;p:start_stop"
这允许用户组(S-1-5-32-545)的成员启动和停止MyService。

我关注torak,我理解关于服务权限的关键区别:

  • 服务具有与“运行方式”用户相关的权限
  • 服务具有不同的权限来控制服务(即启动/停止服务)
因此,要启动服务,我需要修改服务控制权限

嗯,我做了一个名为Service1的windows服务,并用WIX做了一个安装程序。 在安装过程中,我调用

显然,如果不提升TestProgram(在普通用户帐户下运行),它不会启动服务

因此,解决方案是指示WIX允许用户组成员(例如)使用标签启动/停止服务:


希望这有帮助。谢谢大家。

是我关注并解决问题的链接

如何授予非管理员管理服务的权限

默认情况下,没有系统管理员权限的普通用户 无法管理Windows服务。这意味着他们不能停止,不能开始 或更改此类服务的设置或权限。在某些方面 在某些情况下,用户必须具有重新启动或重新启动的权限 管理某些服务。在本文中,我们将考虑一些方法。 管理Windows服务的权限。特别是,我们将展示如何 授予没有管理权限的标准用户权限的步骤 要启动和停止特定服务

没有简单方便的集成工具来管理服务 Windows中的权限。我们将考虑一些方法来授予用户。 管理服务的权限


如果我可以加上我的2美分,这是我的解决方案,它不需要任何复杂的应用程序清单或Windows服务修改

该概念只是通过提升的流程调用“净启动”

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 "";
    }

对不起,也许我不清楚。这正是一个编程问题。我正试图从一个C#WPF应用程序启动一个服务,但我需要在没有提升的情况下启动它。我还找到了一个解决方案,如果你重新打开这个问题,我可以分享它。哇!不适合我。在提升的提示符中,命令运行OK。服务“MySQL”。我选择了“管理员”组。已尝试(在非提升提示中):失败:“StartService:OpenService失败5:访问被拒绝”。重新启动。重试:同样失败。如果您使用
S-1-5-32-545
,这意味着管理员和您必须运行提升版。谢谢。。。再次提升:这一次我遇到以下失败:“处理的ACL of:/SetACL已完成,但出现错误):/SetACL错误消息:调用SetNamedSecurityInfo()失败/操作系统错误消息:访问被拒绝”抱歉;不知道你的系统发生了什么。这对我来说很好。
var service = new ServiceController("Service1");
service.Start();
<util:PermissionEx User="Users" ServiceStart="yes" ServiceStop="yes">
</util:PermissionEx>
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 "";
    }