Пакетный файл - Запускать от имени администратора, если не удалить пакетный файл?

Привет, я создал командный файл, который мне нужно запустить от имени администратора. Для этой цели я использую этот сценарий, который я взял из здесь (StackOverflow).

Но я хочу, чтобы если пользователь решил не запускаться от имени администратора (нажмите НЕТ для UAC), тогда программа выйдет, и пакет удалит себя автоматически.

Команда для пакетного файла на удаление самого себя - "del% 0", но мне нужна помощь относительно того, где в этом сценарии я могу поместить эту команду. Я попытался поставить его с помощью «@exit / B», но затем командный файл будет удален, если вы нажмете ДА или НЕТ для UAC, и тогда остальная часть командного файла не сможет выполняться

Кто-нибудь может помочь понять, как запускать команду «del% 0» только тогда, когда пользователь нажимает «NO» для UAC?


@echo off
:checkPrivileges 
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges ) 

:getPrivileges 
if '%1'=='ELEV' (shift & goto gotPrivileges) 

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs" 
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs" 
"%temp%\OEgetPrivileges.vbs" 
@exit /B 

:gotPrivileges 

Спасибо, ребята, руна


person user2154383    schedule 10.03.2013    source источник


Ответы (2)


Если я понимаю ваш вопрос, вам нужен способ определить, было ли отменено приглашение UAC. Вы можете обнаружить это, если используете мой Elevate32.exe или Elevate64.exe (загрузите ElevationToolkit1.zip) с параметром -w, который вернет код выхода 1223 (ERROR_CANCELLED), если вы отмените приглашение UAC.

Счет

person Bill_Stewart    schedule 10.03.2013
comment
Есть ли способ сделать это без вашего программного обеспечения? - person BDM; 11.03.2013
comment
Сомневаюсь, что без внешнего исполняемого файла было бы просто обойтись. Внешний инструмент не должен быть препятствием, поскольку он бесплатный. - person Bill_Stewart; 11.03.2013
comment
Предполагается, что у вас есть разрешение на загрузку программного обеспечения. - person BDM; 11.03.2013
comment
Да, это может зависеть от организации. Однако, по моему опыту, если инструмент соответствует потребностям и является бесплатным, часто бывает, что он может быть проверен службой безопасности и разрешен к использованию. - person Bill_Stewart; 11.03.2013

Я знаю, что это старый вопрос, но все же полезно опубликовать решение.
Если у вас установлен Powershell, вам не нужно создавать новый сценарий vbs, и можно проверить ERRORLEVEL, чтобы определить, было ли отменено приглашение UAC или нет.

Просто вставьте это в свой скрипт:

@echo off
:checkPrivileges 
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges 
) else ( powershell "saps -filepath %0 -verb runas" >nul 2>&1)
if NOT '%errorlevel%' == '0' call :deleteSelf
exit /b


:deleteSelf
start /b "" cmd /c del "%~f0"&exit /b



REM No need for this label
::getPrivileges 
::if '%1'=='ELEV' (shift & goto gotPrivileges) 

::setlocal DisableDelayedExpansion
::set "batchPath=%~0"
::setlocal EnableDelayedExpansion
::ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs" 
::ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs" 
::"%temp%\OEgetPrivileges.vbs" 
::@exit /B 

:gotPrivileges 

Метод удаления, который я взял из сообщения dbenham, здесь

person Ir Relevant    schedule 10.07.2014