【问题标题】:Elevate HTA file and all console commands that are run from it提升 HTA 文件和从中运行的所有控制台命令
【发布时间】:2022-01-24 19:01:24
【问题描述】:

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

当我在脚本中使用Shell.Run "cmd /k powercfg /energy", 1 行时,命令失败,因为未授予提升的权限。当我尝试使用提升权限运行命令的ShellApp.ShellExecute "cmd", "/k powercfg /energy", "", "runas", 1 时,它会打开一个带有“是”和“否”按钮的 UAC 提示符。 (这是在 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“.Run('')”命令从该 HTA 文件执行的所有命令。

【问题讨论】:

  • 这能回答你的问题吗? Make an HTA file run as admin (elevated)
  • 这实际上是显示代码的线程,我从中创建了子例程以保证 HTA 运行提升。问题是没有让 HTA 文件运行提升(我已经成功了);问题是通过 ObjShell.Run("[cmd]") 执行命令以自动以管理员权限运行(意思是,不需要用户处理 UAC 提示)
  • 不幸的是,命令 shell 是作为外部命令执行的,不受赋予 MSHTA 进程的提升权限的约束。在技​​术的限制下,你想做的事情是不可能的。您需要构建自己的程序,而不是依赖 HTA 来完成此类任务。
  • 这可能会有所帮助,但我持怀疑态度 - How to run vbs as administrator from vbs?。您是否尝试过将提升 MSHTA 与使用 runas 与您希望执行的每个命令结合起来?
  • @user692942,是的,我已经尝试过了。它与在非提升的 MSHTA 中运行相同的命令具有相同的结果(意思是,它导致为外部命令弹出 UAC 框)。我认为你可能是对的;没有办法做到这一点。感谢您的帮助。

标签: vbscript hta


【解决方案1】:

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

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

最好的建议是使用成熟的编程语言构建流程,让您more control over the elevation of processes via UAC programmatically 超过使用 HTA。


有用的链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 2022-01-05
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多