2013-03-10 83 views
0

嗨我做了一個批處理文件,我需要以管理員身份運行。爲此,我使用這個腳本,我從here(StackOverflow)中獲取。批處理文件 - 以管理員身份運行,如果不刪除批處理文件?

但我想要的,是如果用戶不選擇以管理員身份運行(單擊否UAC),那麼該程序將退出,批量將其刪除自動自我。

批處理文件中的命令來刪除它的自我是「德爾%0」,但我需要幫助,因爲到這個劇本,我可以把這個命令。 我試圖把它與「@exit/B」,但然後該批處理文件將刪除,如果您按是或否到UAC,然後批處理文件的其餘部分不能執行

任何人都可以幫忙找出當用戶按下「否​​」到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 

謝謝你們 符文

回答

1

如果我理解你的問題,你需要一種方法來檢測,如果UAC提示被取消。如果您使用我的Elevate32.exe或Elevate64.exe(下載ElevationToolkit1.zip)程序並使用-w選項,則可以檢測到此情況,如果您取消UAC提示,則該選項將返回退出代碼1223(ERROR_CANCELLED)。

比爾

+0

了有沒有辦法做到這一點沒有你的軟件? – 2013-03-10 21:31:58

+0

我懷疑沒有外部可執行文件會很簡單。外部工具不應該成爲一個障礙,因爲它是免費的。 – 2013-03-10 23:14:09

+0

假設您有權下載軟件。 – 2013-03-10 23:59:15

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的帖子here

相關問題