Service 启动不带提升的windows服务
我已将windows服务“Service1”配置为作为“本地服务”登录 我构建了一个控制台应用程序以编程方式启动它Service 启动不带提升的windows服务,service,elevated-privileges,Service,Elevated Privileges,我已将windows服务“Service1”配置为作为“本地服务”登录 我构建了一个控制台应用程序以编程方式启动它 var service = new ServiceController("Service1"); service.Start(); 我知道,如果从管理员命令提示符运行ConsoleApplication1,它将顺利启动 如果我在没有仰角的情况下运行它,我会得到: 发生系统错误5 访问被拒绝 但是,我需要在没有提升的情况下启动它
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,我理解关于服务权限的关键区别:
- 服务具有与“运行方式”用户相关的权限
- 服务具有不同的权限来控制服务(即启动/停止服务)
希望这有帮助。谢谢大家。是我关注并解决问题的链接
如何授予非管理员管理服务的权限
默认情况下,没有系统管理员权限的普通用户
无法管理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 "";
}