1

我有以下 HTA 文件:

<html> 
<head> 
<title>test</title>
<SCRIPT Language="VBScript"> 
createobject("Shell.Application").ShellExecute "C:\windows\system32\cmd.exe", "/k powercfg /batteryreport", "", "runas", 1
</SCRIPT>
<body>
</body> 
</html>

当我运行它时,它会显示一个带有来自“Windows 命令处理器”的“是”/“否”按钮的 UAC 提示。单击“是”后,将打开一个标题为“管理员:C:\WINDOWS\SysWOW64\cmd.exe”的命令提示符窗口。但是该命令失败,指出“无法加载电源效率诊断库 (energy.dll)”。

由于以下原因,我很确定打开的命令窗口具有管理员权限:

  1. 它显示一个 UAC 框以打开 CMD 窗口
  2. VBScript 命令应该以提升的权限运行外部命令
  3. 当我在同一个命令窗口中运行以下命令时,它显示“成功”:net session >nul 2>&1 && echo Success || echo Failure。(此命令检查管理员权限;我在这篇文章的评论中发现:https ://superuser.com/a/667745
  4. 标题中写着“管理员:”。

所以,我想知道为什么这个命令不起作用,如果可能的话,我怎样才能让它工作。

我注意到的另一件有趣的事情是,createobject("Shell.Application").ShellExecute "C:\windows\system32\cmd.exe", "/k powercfg /batteryreport", "", "runas", 1从该 HTA 文件中取出第 5 行 ( ) 并将其放入空白 .VBS 文件实际上会导致不同的结果。使用此方法生成的命令窗口的标题不同(“管理员:C:\Windows\System32\cmd.exe”),产生的错误也不同。它说:

启用跟踪 60 秒...观察系统行为...无法打开电源效率诊断 ETW 会话。ETW 会话已在使用中。确保当前没有其他 PowerCfg 实例正在运行。

有没有人对此问题有潜在的解释或解决方案?谢谢你。

4

1 回答 1

1

我相信我找到了问题所在。问题https://stackoverflow.com/a/10989048/18020746引导我朝着正确的方向前进。

与上面链接的答案状态一样,64 位 MSHTA 无法运行powercfg.exe. 但是,当通过 32 位版本的 MSHTA 通过START C:\Windows\System32\mshta.exe [path to the HTA file]在命令提示符中键入来运行 HTA 文件时,powercfg 命令有效。

于 2022-01-24T22:32:23.947 回答