PDA

View Full Version : آموزش: اجرا نمودن برنامه های تحت ویندوز با مجوز مدیر (Run as Administrator) و کار با رجیستری در ویستا و 7



amin_sltny
جمعه 04 فروردین 1391, 12:51 عصر
مقدمه:

در برخی از برنامه هایی که برای ویندوز نوشته می شود نیاز است که از برخی منابع مانند سرویس های SQL Server استفاده شود. در ویندوز ویستا مکانیزمی وجود دارد که به هنگام اجرای برنامه از دسترسی به این منابع جلوگیری می نماید و بنابراین برنامه با خطا روبرو می شود.
برای حل این مشکل، باید کاربر روی فایل اجرایی برنامه (ویا Shortcut آن) کلیک راست نموده و گزینه Run as Administrator را انتخاب نماید. در این صورت برنامه اجازه دسترسی به سرویس های مورد نظر را خواهد داشت.
مشکلی که اینجا وجود دارد این است که اگر قرار باشد هر بار که کاربر قصد اجرای برنامه را دارد، مجبور باشد که این عمل را تکرار نماید، قطعا این موضوع تبدیل به معضلی خواهد شد.
البته در نسخه های مختلف ویندوز ویستا با توجه به تنظیمات امنیتی کاربر، سرویس های مختلفی ممکن است که نیاز به این نوع اجرای برنامه داشته باشند.
آغاز:

برای حل این مشکل باید یکه فایل مانیفست (manifest) ایجاد نماییم. فایل مانیفست در حقیقت یک فایل XML می باشد که برنامه با استفاده از آن به ویندوز ویستا اعلام می دارد که این برنامه باید تحت مجوز مدیر (Administrator) اجرا شود. هنگامی که برنامه با استفاده از فایل مانیفست اجرا می شود، ابتدا یک پنجره تایید (Confirmation) باز می شود و از کاربر سوال می شود که آیا مایل است که این برنامه تحت مجوز مدیر اجرا شود یا خیر.
هنگامی که کاربر این پنجره را تایید نمود، برنامه با موفقیت اجرا می شود.
محتویات فایل XML مربوطه را در شکل زیر ملاحظه می نمایید.


<?xml version="1.0" encoding="utf-8" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="YourExeFileName"
type="win32" />

<description>Your Program Description</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"><security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" />
</requestedPrivileges>
</security>
</trustInfo></assembly>

همانطور که در قطعه کد بالا ملاحظه می نمایید، این مانیفست مربوط به ویندوز های ویستای 32 بیتی می باشد. به جای عبارت "YourExeFileName" در قطعه کد بالا، باید نام فایل اجرایی برنامه خود را ذکر نمایید.
فایل مانیفست را باید با فرمت زیر ذخیره نمود::
"YourExeFileName" + ".manifest"
یعنی اگر نام فایل اجرایی برنامه ای که شما نوشته اید MyApplication.exe باشد، نام فایل مانیفست را باید MyApplication.exe.manifest انتخاب نمایید.
نحوه استفاده :

تا اینجای کار، ما فایل مانیفست را ایجاد نموده ایم ولی نحوه استفاده از آن را بیان نکردیم.
فایل مانیفس به 2 صورت قابل استفاده می باشد.

به صورت تعبیه (embed) شده در فایل اجرایی برنامه (exe)
به صورت فایلی جداگانه در کنار فایل اجرایی برنامه

به صورت تعبیه (embed) شده در فایل اجرایی برنامه:

در این روش باید ابتدا فایل مانیفست را کنار فایل اجرایی برنامه کپی کنیم. سپس با استفاده از Command Prompt ویژوال استودیو به دایرکتوری برنامه رفته و دستور زیر را اجرا نماییم. (در قطعه کد زیر فرض نموده ایم که نامه فایل اجرایی برنامه MyApplication.exe بوده و نام فایل مانیفست MyApplication.exe.manifest می باشد)

mt -manifest MyApplication.exe.manifest -outputresource:MyApplication.exe
پس از اینکه این دستور را با موفقیت اجرا نماییم، مانیفست در فایل اجرایی برنامه تعبیه (embed) شده و برنامه ما این قابلیت را پیدا کرده است و دیگر نیازی به فایل مانیفست نیست.
به صورت فایلی جداگانه در کنار فایل اجرایی برنامه :

این روش به نظر مناسب تر از روش قبلی می باشد. در این روش نیاز به هیچ کار خاصی نمی باشد. کافیست که فایل مانیفست همواره کنار فایل اجرایی برنامه باشد. ویندوز ویستا هنگام اجرای برنامه این فایل را شناسایی نموده و سایر اعمال مربوطه را انجام می دهد.