早上好,
我试图验证批处理是否以管理员权限执行。 我找到了这个命令来验证:
openfiles >nul 2>&1
if NOT %errorLevel% == 0
...
或net session而不是openfiles。
如果我以管理员身份打开命令提示符并且如果我使用正常命令提示符则返回错误,则一切正常。
当我尝试在单个提升权限命令提示符中执行两个批处理时,会出现问题; 第一批正确执行,第二批返回权限错误。
我做错了什么?
答案 0 :(得分:0)
它不像您使用的方法那么紧凑,但我过去成功使用过多次的另一种方法如下:
IF EXIST %SYSTEMROOT%\SYSTEM32\WDI\LOGFILES GOTO GOTADMIN
[Whatever commands you want to run if not running as admin]
:GOTADMIN
[Whatever commands you want to run if running as admin]
这是有效的,因为默认情况下,Windows只允许使用提升的权限访问WDI目录。因此,通过告诉脚本在该目录中查找应该存在的另一个目录,可以使用它来检测它是否以管理员身份运行。如果是,它会看到LOGFILES存在并返回True。如果不是,则不允许访问WDI文件,因此它不会看到LOGFILES存在并返回False。
不可否认,这只有在WDI目录的默认安全权限没有更改时才有效,但根据我的经验,这些权限在大多数安装中都不太可能会被更改。它还要求WDI目录中的LOGFILES目录尚未被删除或重命名,但我发现这种情况极不可能发生,因为它是WDI目录的一个组成部分。
我已经测试并确认这可以在Windows 7,8,8.1和10上运行。我还没有在Vista上测试它,但我认为它的工作原理是因为Vista与7的相似之处。显然这里有#s在XP上使用此方法没有任何好处,因为默认情况下所有命令提示都在该版本的Windows上以最大高度运行。