2016-07-28 6 views
3

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

Скрипт ниже автоматической возводит пользователя с правами администратора правильно, если да выбирается в диалоге, но диалоговые ошибки всплывающие окна (за пределами окна Cmd) «Не удается найти„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 

ответ

0

Я исправил сценарий, и теперь он отлично работает. Согласно моим исследованиям, это самый простой надежный способ динамического предоставления регулярных пользовательских прав администратора в течение всего сеанса 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 
+0

Я до сих пор не могу получить его на работу, а не с «% ~ snx0», а не «% ~ dpsnx0» =/Мой рабочий каталог не то же самое, как мой сценарий директории, так что до сих пор жалуется на это не удалось найти мой .cmd. Я также заметил, что MSHTA удаляет косые черты с пути. - Я работал вокруг него, используя POPD "% ~ dp0" –