বেন গ্রিপকার সমাধানটি অসীম লুপের কারণ হয়। তাঁর ব্যাচটি এইভাবে কাজ করে (সিউডো কোড):
IF "no admin privileges?"
"write a VBS that calls this batch with admin privileges"
ELSE
"execute actual commands that require admin privileges"
যেমন আপনি দেখতে পাচ্ছেন, ভিবিএস প্রশাসকের সুযোগ-সুবিধার অনুরোধে ব্যর্থ হলে এটি একটি অসীম লুপ তৈরি করে।
তবে, অসীম লুপটি ঘটতে পারে, যদিও অ্যাডমিন প্রিভিলিজেস সফলভাবে অনুরোধ করা হয়েছে।
বেন গ্রিপকার ব্যাচ ফাইলে চেকটি কেবল ত্রুটি-প্রবণ। আমি ব্যাচের সাথে চারপাশে খেলেছি এবং পর্যবেক্ষণ করেছি যে চেক ব্যর্থ হওয়া সত্ত্বেও অ্যাডমিন সুবিধাগুলি উপলব্ধ। মজার বিষয় হচ্ছে, চেকটি প্রত্যাশা মতো কাজ করেছে, যদি আমি উইন্ডোজ এক্সপ্লোরার থেকে ব্যাচ ফাইলটি শুরু করি তবে এটি আমার আইডিই থেকে শুরু করার পরে তা হয়নি।
সুতরাং আমি দুটি পৃথক ব্যাচ ফাইল ব্যবহার করার পরামর্শ দিই। প্রথমটি ভিবিএস উত্পন্ন করে যা দ্বিতীয় ব্যাচের ফাইলকে কল করে:
@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
এটি কোনও অসীম লুপগুলির কারণ না করে ত্রুটি-প্রবণ অ্যাডমিন সুবিধাগুলি পরীক্ষাও সরিয়ে দেয়।