ทางออกของ Ben Gripka ทำให้เกิดลูปไม่สิ้นสุด ชุดของเขาทำงานเช่นนี้ (รหัสหลอก):
IF "no admin privileges?"
"write a VBS that calls this batch with admin privileges"
ELSE
"execute actual commands that require admin privileges"
อย่างที่คุณเห็นนี่จะทำให้เกิดการวนซ้ำไม่สิ้นสุดหาก VBS ล้มเหลวในการขอสิทธิ์ผู้ดูแลระบบ
อย่างไรก็ตามการวนซ้ำไม่สิ้นสุดสามารถเกิดขึ้นได้แม้ว่าจะมีการร้องขอสิทธิ์ของผู้ดูแลระบบสำเร็จแล้วก็ตาม
การตรวจสอบไฟล์แบตช์ของ Ben Gripka นั้นเป็นเรื่องที่เกิดข้อผิดพลาดได้ง่าย ฉันเล่นกับแบตช์และสังเกตว่ามีสิทธิ์ของผู้ดูแลระบบแม้ว่าการตรวจสอบจะล้มเหลว ที่น่าสนใจการตรวจสอบทำงานตามที่คาดไว้ถ้าฉันเริ่มแบตช์ไฟล์จาก windows explorer แต่มันไม่ได้เกิดขึ้นเมื่อฉันเริ่มต้นจาก IDE ของฉัน
ดังนั้นฉันแนะนำให้ใช้สองไฟล์แบตช์แยกกัน ไฟล์แรกสร้าง VBS ที่เรียกไฟล์แบตช์ที่สอง:
@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"
ที่สองชื่อ "my_commands.bat" และอยู่ในไดเรกทอรีเดียวกันกับที่แรกประกอบด้วยคำสั่งจริงของคุณ:
pushd "%CD%"
CD /D "%~dp0"
REM Your commands which require admin privileges here
สิ่งนี้ทำให้ไม่มีการวนซ้ำไม่สิ้นสุดและยังลบการตรวจสอบสิทธิ์ผู้ดูแลระบบที่ผิดพลาด