Простой способ запустить пакет от имени администратора с помощью javascript

Я хочу получить простой надежный метод автоматического повышения уровня запущенного пакета без использования дополнительных файлов VBS или ярлыков с повышенными правами, предложенных в других потоках. Вызов диалога UAC из пакета через javascript обеспечивает короткий простой код.

Приведенный ниже сценарий автоматически повышает права пользователя до прав администратора, когда в диалоговом окне выбрано значение «Да», но появляется всплывающее диалоговое окно с ошибкой (за пределами окна 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

person sambul35    schedule 28.07.2016    source источник


Ответы (1)


Я исправил скрипт, и теперь он работает отлично. Согласно моим исследованиям, это самый простой и надежный способ динамического предоставления обычному пользователю прав администратора на время сеанса Cmd в запущенном пакете, опубликованном где угодно.

Он не требует использования функций, гибридных пакетных и 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
person sambul35    schedule 29.07.2016
comment
Я все еще не могу заставить его работать, ни с %~snx0, ни с %~dpsnx0 =/ Мой рабочий каталог не совпадает с каталогом моего скрипта, поэтому он все еще жалуется, что не может найти мой .cmd - я также заметил, что MSHTA убирает косые черты с пути. - Я работал над этим, используя POPD %~dp0 - person script'n'code; 14.07.2017