0

こんにちは、管理者として実行する必要があるバッチ ファイルを作成しました。そのために、ここ(StackOverflow) から取得したこのスクリプトを使用します。

しかし、私が望むのは、ユーザーが管理者として実行しないことを選択した場合 (UAC に対して [いいえ] をクリック)、プログラムは終了し、バッチはそれ自体を自動的に削除します。

バッチ ファイル自体を削除するためのコマンドは "del %0" ですが、このコマンドをスクリプトのどこに配置できるかについて助けが必要です。「@exit /B」で入れてみたのですが、UACにYESかNOを押すとバッチファイルが削除されて残りのバッチファイルが実行できません

ユーザーが UAC に対して「いいえ」を押したときに、コマンド「del %0」のみを実行する方法を理解できる人はいますか?


@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 

ありがとうルーン

4

2 に答える 2

1

あなたの質問を理解できたら、UAC プロンプトがキャンセルされたかどうかを検出する方法が必要です。Elevate32.exe または Elevate64.exe ( ElevationToolkit1.zipをダウンロード) プログラムを -w オプションと共に使用すると、これを検出できます。UAC プロンプトをキャンセルすると、終了コード 1223 (ERROR_CANCELLED) が返されます。

明細書

于 2013-03-10T18:42:33.507 に答える
0

私はそれが古い質問であることを知っていますが、解決策を投稿することはまだ役に立ちます。
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 の投稿から取った削除方法

于 2014-07-10T20:50:46.150 に答える