سلام به همه دوستان
خيلي ها با عدم رجيستر شدن کامپوننت هاي برنامه ،در ويستا و يوزرهاي غير از ادمين مشکل دارند.در اين چند سطر ناقابل قراراست با يک روش جديد (البته براي خودم جديده وگرنه همه شما سروران و اساتيد بنده ايد و احتمالا آشنايي داريد) آشنا بشيم که ما را از مشکلات مطرح شده رهايي بدهد
اساس کار اين روش مبتني بر مانيفست (Manifest)است که خيلي کارها انجام می دهد و يکيش اينه .خوب شروع مي کنيم
براي مثال ما کامپوننتي داريم به نام MyActivex.Ocx (که برای راحتی کار و درک سریع تر یک نمونه خیلی ساده ضمیمه کردم).و قراراست از آن در برنامه خودمان استفاده کنيم.اول از همه ببينيم محتويات فايل مانيفست مربوط به اون چيه
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<file name="MyActivex.Ocx">
<typelib
tlbid="{E275D2AE-1019-49D1-ACDE-C08050E9A940}"
version="1.0"
helpdir=""/>
<comClass description=""
clsid="{0DC66248-2DC0-438A-A888-95D27848BA48}"
progid="MyActivex.UserControl1"
threadingModel="Apartment"
tlbid="{E275D2AE-1019-49D1-ACDE-C08050E9A940}" />
</file>
</assembly>
اگر اين فايل را کنار فايل اجرايي برنامه خودمان گذاشته ونام آن را EXEName.exe.manifest بگذاريم( EXEName.exe نام فايل اجرايي ماست .مثلا اگر نام برنامه ما MyProgram.exe باشد نام فايل مانيفست به اين شکل است MyProgram.exe.manifest) ديگر احتياجي به رجيستر کردن کامپوننت از قبل نبوده و از دردسرهاي رجيستر نشدن در يوزرهاي غير از ادمين نجات پيدا مي کنيم
حالا اين سوال پيش مياد که اون tlbid و clsid و progid از کجا بدست مي آيند؟
هرچند ابزارهايي براي بدست آوردن آنها از درون خود کامپوننت ها وجود دارد ولي اينجا يک روش ساده که مبتني بر رجيستري است را با هم مي بينيم.بعدا سر فرصت برنامه هاي مذکور را نیز قرار ميدهم
خب کافيست کامپوننت مورد نظر را در سيستم خودتان رجيستر کنيد.بعد رجيستري را بازکرده و به دنبال نام کامپوننت مذکور بگرديد.براي مثال ما اينجا دنبال کلمه MyActivex.ocx ميگرديم.نتيجه را در زيرشاخه
HKEY_CLASSES_ROOT\CLSID\
پيدا ميکنيد.
حالا اطلاعات مربوطه را از اين قسمت استخراج ميکنيم و در فايل مانيفست قرار مي دهيم.
به همين راحتي.ضمنا می توان اطلاعات چند کامپوننت را نیز در یک مانیفست قرار داد.سکشن های
<File>
.
.
.
</File>
را برای سایر کامپوننت ها توسعه دهید.
موفق باشید