Die Lösung von Ben Gripka verursacht Endlosschleifen. Sein Batch funktioniert folgendermaßen (Pseudocode):
IF "no admin privileges?"
"write a VBS that calls this batch with admin privileges"
ELSE
"execute actual commands that require admin privileges"
Wie Sie sehen können, führt dies zu einer Endlosschleife, wenn der VBS keine Administratorrechte anfordert.
Die Endlosschleife kann jedoch auftreten, obwohl Administratorrechte erfolgreich angefordert wurden.
Die Überprüfung in der Batch-Datei von Ben Gripka ist nur fehleranfällig. Ich habe mit dem Stapel herumgespielt und festgestellt, dass Administratorrechte verfügbar sind, obwohl die Prüfung fehlgeschlagen ist. Interessanterweise funktionierte die Überprüfung wie erwartet, wenn ich die Batchdatei über den Windows Explorer startete, aber nicht, als ich sie über meine IDE startete.
Daher schlage ich vor, zwei separate Batch-Dateien zu verwenden. Der erste generiert den VBS, der die zweite Batchdatei aufruft:
@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"
Die zweite mit dem Namen "my_commands.bat" befindet sich im selben Verzeichnis wie die erste und enthält Ihre eigentlichen Befehle:
pushd "%CD%"
CD /D "%~dp0"
REM Your commands which require admin privileges here
Dies verursacht keine Endlosschleifen und entfernt auch die fehleranfällige Administratorberechtigungsprüfung.