Winforms 如何允许windows窗体应用程序重新启动windows服务而不考虑权限?

Winforms 如何允许windows窗体应用程序重新启动windows服务而不考虑权限?,winforms,.net-4.0,permissions,windows-services,uac,Winforms,.net 4.0,Permissions,Windows Services,Uac,我正在处理的当前应用程序的设计是对WCF服务的调用,该服务托管在Windows服务中,可提取数据并将其存储在硬盘上。它与将与WCF服务交互的windows窗体应用程序配对。要求之一是最终用户能够通过Forms应用程序重新启动windows服务 所以,我猜这可以使用ServiceController类来完成。。。但是权限呢?我认为我们不能(或应该)保证windows应用程序以管理员的身份运行,并且该服务以网络服务的形式运行 我看到的唯一一件事似乎合理地涵盖了这种情况,那就是运行另一个windows

我正在处理的当前应用程序的设计是对WCF服务的调用,该服务托管在Windows服务中,可提取数据并将其存储在硬盘上。它与将与WCF服务交互的windows窗体应用程序配对。要求之一是最终用户能够通过Forms应用程序重新启动windows服务

所以,我猜这可以使用ServiceController类来完成。。。但是权限呢?我认为我们不能(或应该)保证windows应用程序以管理员的身份运行,并且该服务以网络服务的形式运行

我看到的唯一一件事似乎合理地涵盖了这种情况,那就是运行另一个windows服务,然后可以将其安装在具有更高权限的帐户下,您可以调用该帐户来重新启动目标服务

但是我不想给这个项目增加太多的复杂性,特别是因为它上周应该是测试版

那么,有没有一种方法可以让表单应用程序获得重新启动其特定配套服务所需的权限

接下来的问题是,我们可能会让服务在服务器上运行,而不是在与应用程序相同的机器上运行。这是否会使允许表单应用程序重新启动服务变得不切实际?如果是这样的话,我可能会主张削减功能


哦,应该注意的是,目标平台是WinXP和带有.NET4的Win7。

让服务自行重新启动如何?它可以公开一个方法,
Restart(stringuserid,stringpassword)
或类似的东西

在被授权用户调用时,它可以使用本文中概述的方法。即:

  • 将服务设置为在出现故障时重新启动
  • 调用
    环境。退出(1)
  • 操作系统为您重新启动服务

  • 如果不想重新启动,您将调用
    环境。退出(0)

    您可以为要启动和停止的服务分配权限,而不是授予应用权限

    每个windows服务都有一个安全描述符,该描述符为您分配了对该服务执行操作的权限。默认情况下,经过身份验证的用户有权读取服务状态,管理员有权控制和删除服务

    您可以使用命令
    sc sdset
    设置服务安全描述符。例如,此命令将允许任何用户控制服务(但仅允许管理员和本地系统删除服务或更改服务的安全性):

    sd-sdset“D:(A;;CCLCSWRPWPDTLOCRSDRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)”


    如果只允许使用特定帐户来控制服务,则可能需要稍微调整安全描述符。只要机器对远程帐户进行身份验证,这也可以远程工作

    这是正确的方法,但是使用SetACL设置服务的权限更容易。以下是一个例子: