【问题标题】:Grant access to non-admin user to start/stop services windows 7授予非管理员用户启动/停止服务 windows 7 的访问权限
【发布时间】:2014-01-21 12:09:40
【问题描述】:

我有一个 windows 服务和一个 windows 应用程序。我想通过参数从我的 windows 应用程序启动和停止这个 windows 服务。这是我启动服务所必须的

  foreach (ServiceController sc in ServiceController.GetServices())
            {
                if (sc.ServiceName == "serviceName")
                {
                    //service is found
                    using (ServiceController serviceController = new ServiceController("serviceName"))
                    {
                        string[] args = new string[1];
                        args[0] = "Myargument";
                        if (serviceController.Status == ServiceControllerStatus.Running) 
                        {

                        }
                        else { serviceController.Start(args); }

                }
            }

但它给了我无法在计算机上打开服务'.'异常。我尝试使用 app.manifest 强制以管理员身份运行,但仍然出现异常。我也尝试了这篇文章here 但是异常仍然存在。是否有人知道如何在 Windows 7 中授予对非管理员用户管理服务的访问权限?

【问题讨论】:

标签: c# windows windows-services


【解决方案1】:

您可以使用SetServiceObjectSecuritySetNamedSecurityInfo 更改服务的权限。

我有一些代码使用ConvertStringSecurityDescriptorToSecurityDescriptor 创建安全描述符以传递给SetServiceObjectSecurity。给定一个安全描述符,您可以使用GetSecurityDescriptorDacl 让DACL 传递给SetNamedSecurityInfo

我用来创建安全描述符的 SDDL 字符串如下:

wchar_t sddl[] = L"D:"
  L"(A;;CCLCSWRPWPDTLOCRRC;;;SY)"           // default permissions for local system
  L"(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)"   // default permissions for administrators
  L"(A;;CCLCSWLOCRRC;;;AU)"                 // default permissions for authenticated users
  L"(A;;CCLCSWRPWPDTLOCRRC;;;PU)"           // default permissions for power users
  L"(A;;RP;;;IU)"                           // added permission: start service for interactive users
  ;

当然,此代码需要以提升的权限运行。通常,您会在安装服务的同时设置权限。

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 2023-04-06
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    相关资源
    最近更新 更多