提升 HTA 文件和来自它的 运行 的所有控制台命令

Elevate HTA file and all console commands that are run from it

我有一个 HTA 文件,其中嵌入了 VBScript。在 VBScript 中,我需要调用需要提升权限的命令提示符命令 (powercfg /energy)。该命令每分钟将被调用多次,因此我无法让用户每次需要 运行 命令时都处理 UAC 提示。

当我在脚本中使用行 Shell.Run "cmd /k powercfg /energy", 1 时,命令失败,因为未提供提升的权限。当我尝试执行 ShellApp.ShellExecute "cmd", "/k powercfg /energy", "", "runas", 1,其中 运行 是具有提升权限的命令时,它会打开带有“是”和“否”按钮的 UAC 提示符。 (这是 运行ning 在 Windows 10 教育版上)。

显然我不能让 UAC 提示在一分钟内多次打扰用户,所以我尝试在 VBScript 中实现以下子例程以重新运行 HTA 文件从一开始就处于提升模式(它之前是 运行 基本权限)如果尚未提升:

Sub ensureAdmin()
    is_admin = isAdmin() ' function that checks for admin permissions in current window

    If is_admin = False Then
        ShellApp.ShellExecute "mshta", "C:\%userprofile%\desktop\gPowerMeter.hta", "", "runas", 1
        Window.Close
        End If
    End Sub

我知道这段代码成功地以提升的权限重新启动了 HTA 文件,因为它会弹出一个带有“是”和“否”按钮的 UAC 提示。

问题是,添加此子例程似乎不会影响脚本执行 运行 提升的控制台命令的能力。当 HTA 是 运行 基本权限时,我用我之前尝试的两行得到了相同的结果。

有人对如何在提升模式下 运行 HTA 和来自它的所有脚本有任何建议吗?我可以实施一个解决方法,但它会不那么优雅。谢谢。

注意:我没有遇到将 HTA 提升到 运行 的问题。我只想提升通过 VBScript“.运行('')”命令从该 HTA 文件执行的所有命令。

不幸的是,在您所使用的技术的限制下,您尝试做的事情是不可能的。

提升 MSHTA 进程不会影响您希望从中 运行 执行的 shell 进程的提升。您可以期望的最好结果是 elevating the individual shell process via the runas command。但是,正如您已经指出的那样,这将触发 UAC(用户帐户控制)提示。

最好的建议是使用 fully-fledged 允许您 more control over the elevation of processes via UAC programmatically 而不是使用 HTA 的编程语言构建流程。


有用的链接