1

我有一个批处理文件来将应用程序作为 Windows 服务启动。它被称为 start.bat

@ECHO off
START c:\Ruby193\bin\ruby c:\Ruby193\bin\thin start -R c:\coolapp\config.ru -p 4321 -a localhost -e production

我的挑战是,该程序只有在具有管理员权限的“以管理员身份运行”时才能正常运行。所以,我想添加一行来检查这个脚本是否真的以管理权限运行,并且只有在它以管理员身份运行时才执行。

我怎样才能从脚本中做到这一点?

4

3 回答 3

3

像这样的东西可能是你需要的:

set isadmin=0
whoami /all | findstr /c:" S-1-16-12288 ">nul && set isadmin=1

这应该导致%isadmin%变量是1或者0取决于 shell 是否以管理员身份运行。

这假设存在该whoami实用程序,该实用程序不一定在旧版本的 Windows 上可用 - 我相信它是从 Windows Vista 开始包含的。

于 2013-06-03T18:40:50.537 回答
1

两种选择:

  1. 从 WSH 脚本引发提升,如博客文章Scripting Elevation on Vista中所述。

  2. 使用引发 UAC 提示的外部可执行文件,例如Elevate32.exe/Elevate64.exe

对于您的方案,#2 可能更可取,因为您可以检测提升提示是否已取消(退出代码 1223),并且您还可以等待启动的可执行文件完成后再继续(-w 参数)。

账单

于 2013-06-03T18:26:45.547 回答
0

将脚本转换为 VBScript 可能会更容易,然后您可以更轻松地检查管理员权限,甚至将脚本提升为管理员。

请参阅此处了解如何在 VBScript 中进行检查:VBScript:检查脚本是否具有管理权限

于 2013-06-03T18:28:08.807 回答