【问题标题】:Simple method to run a batch as Administrator using javascript使用 javascript 以管理员身份运行批处理的简单方法
【发布时间】:2016-12-03 05:35:36
【问题描述】:

我想推导出一种简单可靠的方法来自动提升正在运行的批处理,而无需使用其他线程中提出的额外 VBS 文件或提升的快捷方式。通过 javascript 从批处理中调用 UAC 对话框可确保简短的简单代码。

当在对话框中选择“是”时,以下脚本会自动将用户正确提升为管理员权限,但会弹出错误对话框(在 Cmd 窗口之外)“Windows 找不到 'test.bat' ”。可能是因为文件路径包含空格吗?如何修复代码或抑制此错误弹出?

@echo off
:: test admin rights
>nul 2>&1 net file
echo '%errorlevel%'
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute("%~nx0", '', '', 'runas', 1);close();"
:: test admin rights
>nul 2>&1 net file
echo '%errorlevel%'
if !errorlevel! equ 0 echo Hello >%temp%\tst.txt
exit /b

【问题讨论】:

    标签: javascript batch-file uac shellexecute hybrid


    【解决方案1】:

    我修复了脚本,现在它运行良好。根据我的研究,这是在任何地方发布的运行批处理中动态授予普通用户管理员权限的最简单可靠的方法。

    它不需要使用函数、混合批处理和 VBS 构造、额外文件或提升的快捷方式。它是 Windows 原生的。用户可以在:usercode部分添加自己的任务代码以批量运行。

    @echo off
    setlocal EnableDelayedExpansion
    :: test and acquire admin rights
    cd /d %~dp0 & echo/
    if not "%1"=="UAC" (
        >nul 2>&1 net file && echo Got admin rights || (echo No admin rights & ^
    MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute("%~snx0", 'UAC', '', 'runas', 1);close();"))
    :: re-test admin rights
    echo/ & >nul 2>&1 net file && (echo Got admin rights & echo/) || (echo No admin rights. Exiting... & goto :end)
    
    :usercode
    :: add your code here
    echo Performing admin tasks
    echo Hello >C:\test.txt
    
    :end
    timeout /t 5 >nul
    exit /b
    

    【讨论】:

    • 我仍然无法让它工作,不是使用“%~snx0”,也不是使用“%~dpsnx0”=/我的工作目录与我的脚本目录不同,所以它仍然抱怨它无法找到我的 .cmd - 我还注意到 MSHTA 从路径中去除了斜杠。 - 我使用 POPD "%~dp0" 解决了这个问题
    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2012-10-06
    • 2013-05-29
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2015-02-09
    相关资源
    最近更新 更多