سیستم عاملهای جدید ویندوز از مکانیزمی به نام MIC جهت محدود کردن دسترسی به بخشهای حساس ویندوز استفاده میکند و کاربران بطور معمول اعتبار Medium Integrity را دارا میباشند
در اجرا برنامهها و یا اسکریپتها که نیاز به دستری یا تغییر فایلهای سیستمی و یا دسترسی به ریجستری ویندوزی نیازمند است در حالت Administrator به اجرا درآورید، آن وقت به صورت یک جا تمام دسترسیهای سطح بالا در اختیار آن برنامه یا فایل قرار میگیرد. تنها در صورت اعطای این مجوز است که برنامهها و فایلها میتوانند به فایلهای سیستمی ویندوز دسترسی پیدا کنند. بنابراین برای اجرای صحیح و کامل بعضی برنامهها، ارائه مجوز Run as Administrator الزامیست.
راههای ساده ای مانند کلیک راست و Run as Administrator و گزفتن Shift + Ctrl و اجرا برنامه و روش Compatibility Properties برای اجرا موجود است
در این مطلب در ادامه آموزش اسکریپت نویسی فایل .bat میخواهیم نیاز نباشد کاربر از روشهای بالا Run as Administrator انجام بدهد و با اجرا فایل بصورت خودکار در سطح دسترسی Administrator اجرا شود.
مطالعه مطالب و آموزشهای قبلی مفید میباشد:
درباره Batch File و دستورات CMD و .BAT
کد اول
برای اینکار به سادگی میتوانید متن زیر را به ابتدای فایل اسکریپت اضافه کنید و بعد از :start کد اسکریپت خود را قرار دهید
@echo off
setlocal EnableDelayedExpansion & cd /d "%~dp0"
%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :start","","runas",0)(window.close)&exit
:start
این دستور با استفاده از vbscript فایل باز شده را با دسترسی Administrator دورباره اجرا میکند و جهت ادامه کار goto به :start میژند و ادامه اسکریت را اجرا میکند و پنجره اجرای عادی فایل را میبندد.
کد دوم
برای استفاده از این روش متن زیر را در .bat کپی کنید و کد اکریپت مورد نظر را در محل <YOUR BATCH SCRIPT HERE> جاگذاری کنید
@echo off
call :isAdmin
if %errorlevel% == 0 (
goto :run
) else (
echo Requesting administrative privileges...
goto :UACPrompt
)
exit /b
:isAdmin
fsutil dirty query %systemdrive% >nul
exit /b
:run
<YOUR BATCH SCRIPT HERE>
exit /b
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B`
این اسکریپت با دستور call زیرمجموعه دستور ایجاد میکند و در قسمت:isAdmin توسط دستور fsutil dirty query %systemdrive% (این دستور نام درایو ویندوز را میپرسد از انجا که این کار به دسترسی ادمین نیاز دارد در اینجا استفاده شده است) و چک کردن %errorlevel% بررسی دسترسی ادمین را انجام میدهد اگر دسترسی ادمین باشد اسکریپت شما اجرا میشود در غیر این صورت یک فایل getadmin.vbs در پوشه temp ویندوز با دستور اجرای cmd.exe در حالت Run as Administrator و مسیر دادن خود اسکریت فایل دسترسی را مجدد بررسی میکند. در انتها هم فایل getadmin.vbs را حذف میکند