Rozwiązanie Bena Gripki powoduje nieskończone pętle. Jego partia działa tak (pseudokod):
IF "no admin privileges?"
"write a VBS that calls this batch with admin privileges"
ELSE
"execute actual commands that require admin privileges"
Jak widać, powoduje to nieskończoną pętlę, jeśli VBS nie zażąda uprawnień administratora.
Jednak nieskończona pętla może wystąpić, chociaż pomyślnie zażądano uprawnień administratora.
Sprawdzanie w pliku wsadowym Bena Gripki jest po prostu podatne na błędy. Bawiłem się tą partią i zauważyłem, że uprawnienia administratora są dostępne, chociaż sprawdzenie się nie powiodło. Co ciekawe, sprawdzenie działało zgodnie z oczekiwaniami, jeśli uruchomiłem plik wsadowy z eksploratora Windows, ale tak się nie stało, gdy uruchomiłem go z mojego IDE.
Dlatego sugeruję użycie dwóch oddzielnych plików wsadowych. Pierwsza generuje VBS, który wywołuje drugi plik wsadowy:
@echo off
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c ""%~dp0\my_commands.bat"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
Drugi, o nazwie „my_commands.bat” i znajdujący się w tym samym katalogu co pierwszy, zawiera Twoje aktualne polecenia:
pushd "%CD%"
CD /D "%~dp0"
REM Your commands which require admin privileges here
Powoduje to brak nieskończonych pętli, a także usuwa podatne na błędy sprawdzanie uprawnień administratora.