बेन ग्रिप्का का समाधान अनंत छोरों का कारण बनता है। उनका बैच इस तरह काम करता है (छद्म कोड):
IF "no admin privileges?"
"write a VBS that calls this batch with admin privileges"
ELSE
"execute actual commands that require admin privileges"
जैसा कि आप देख सकते हैं, यह एक अनंत लूप का कारण बनता है, अगर वीबीएस व्यवस्थापक विशेषाधिकारों का अनुरोध करने में विफल रहता है।
हालांकि, अनंत लूप हो सकता है, हालांकि व्यवस्थापक प्राइवेटिलीज़ को सफलतापूर्वक अनुरोध किया गया है।
बेन ग्रिप्का की बैच फ़ाइल में चेक केवल त्रुटि-प्रवण है। मैंने बैच के साथ खेला और देखा कि व्यवस्थापक विशेषाधिकार उपलब्ध हैं, हालांकि चेक विफल रहा। दिलचस्प है, चेक ने अपेक्षा के अनुरूप काम किया, अगर मैंने विंडोज़ एक्सप्लोरर से बैच फ़ाइल शुरू की, लेकिन यह तब नहीं हुआ जब मैंने इसे अपनी आईडीई से शुरू किया था।
इसलिए मैं दो अलग-अलग बैच फ़ाइलों का उपयोग करने का सुझाव देता हूं। पहला 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
यह कोई अनंत छोरों का कारण बनता है और त्रुटि-प्रवण व्यवस्थापक विशेषाधिकार जांच को भी हटा देता है।