在 Windows 7 上以批处理文件形式启动服务

在 Windows 7 上以批处理文件形式启动服务

我有一个相当简单的批处理文件,它只做一件事 - “网络启动我的服务“。此批处理文件由安装程序在程序组中快捷方式,以便用户只需单击图标即可启动(或停止)程序。对于具有管理员权限的用户,在 XP 中一切都运行良好。但在 Win7 上,事情变得棘手,因为批处理需要明确以“管理员身份”运行,而用户通常不知道这一点。所以我的问题是如何让它变得友好?告诉用户在 Win7 上右键单击并以管理员身份运行,然后在 XP 上单击,这有点奇怪。我需要一个智能自动的简单东西。

我可能可以在批处理中使用“runas/user:administrator”,但这个“管理员”帐户在某些机器上可能不可用。我正在寻找一种通用解决方案,可以在任何 Windows 机器上安装此类程序。

有想法吗?你会怎么做?

答案1

下载适用于 Windows 的 Elevation PowerToys来自 Microsoft。然后,您可以在安装过程中包含脚本,以便可以从批处理文件运行elevate net start servicename,它会向他们提供 UAC 提升提示。只要用户在计算机上具有管理权限,或者可以让管理员为他们执行提升,它就会以提升的权限运行命令,并且应该可以正常工作。无需指定用户名或任何其他内容。该文章中有一整节关于创建一个脚本,该脚本可以检测它是否以足够的访问级别运行,如果没有,则提升自身。

答案2

更改服务的权限,myservice以允许普通用户启动它。


一个简单的方法是使用进程探索器:启动服务,在ProcExp中双击其进程,打开服务选项卡,然后使用权限按钮。

(进程浏览器)

(ProcExp:属性 - 服务)


困难的方式:

C:\>sc sdshow Schedule

D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPLOCRRC;;;PU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)

显示的文本是安全描述符字符串.每个(...)元素都是一个ACE 字符串

例如,将其附加到 SD 将允许用户控制服务:

(A;;GX;;;BU)

BU是个SID 字符串内置用户组。在大多数情况下,授予GX( GENERIC_EXECUTE)应该足够了

注意:ACE 字符串中的“权限”似乎与实际授予的权限没有任何明显对应关系。例如,“启动服务”为RP( READ_PROPERTY),“停止服务”为WP( WRITE_PROPERTY)。

答案3

查看工具,它包含一个名为的应用程序psservice.exe,为了启动服务,它使用以下命令行:

psservice.exe [\\Computer [-u Username [-p Password]]] start <svc>

如果这将由受限用户运行,那么您可能需要将批处理文件包装在 exe 中,以防止用户看到管理员密码。

相关内容