PDA

View Full Version : سوال: تشخیص رجیستر شدن یک کامپوننت



nazanin_90
سه شنبه 27 بهمن 1394, 05:28 صبح
سلام
با چه کدی میتوان فهمید که آیا یک کامپوننت خاص در سیستم رجیستری شده یانه ؟
با تشکر

AbbasVB
چهارشنبه 28 بهمن 1394, 17:39 عصر
سلام
این که قبلا رجیستر شده یا نه نمی دونم دقیقا
ولی با این کد اگر هم ریجستر نشده باشه رجیستر میشه
Public Function RegisterServer(hWnd As Long, DllServerPath As String, bRegister As Boolean)
On Error Resume Next

Dim lb As Long, pa As Long
lb = LoadLibrary(DllServerPath)

If bRegister Then
pa = GetProcAddress(lb, "DllRegisterServer")
Else
pa = GetProcAddress(lb, "DllUnregisterServer")
End If

If CallWindowProc(pa, hWnd, ByVal 0&, ByVal 0&, ByVal 0&) = ERROR_SUCCESS Then
MsgBox "عمليات انجام با موفقيت شد", vbInformation
Else
MsgBox "عمليات انجام با موفقيت نشد", vbCritical
End If
FreeLibrary lb
End Function



استفاده
Call RegisterServer(Me.hWnd,"\mydll.dll", True)

nazanin_90
شنبه 01 اسفند 1394, 18:10 عصر
با سلام و تشکر
همانطورکه عرض کردم من فقط میخواهم در برنامه چک کنم که آیا کامپوننتی که در برنامه دیگر از آن استفاده میکنم آیا رجیستر شده یا نه ؟

nazanin_90
دوشنبه 17 اسفند 1394, 05:20 صبح
سلام
نمیدانم دوستان حرفه ای در خصوص خطاهای صادر شده از برنامه هایشان که در آن از یک یا چند کامپوننت استفاده کرده اند چه کنترلی بعمل می آورند .
فرض کنید یک برنامه اجرائی با تمام ملزومات آن شامل کامپوننت ها ، فونت ها ، آیکون و .... بصورت پکیج در یک فایل ستاپ قرار داده شده است . به فرض برنامه را در درایو F نصب می کنیم ، تا اینجا برنامه به درستی اجرا میشود . اما اگر کاربری ناخواسته پوشه برنامه را به درایو دیگر انتقال دهد یا مثلاً کامپوننت هائی که در کنار برنامه قرار دارد سهواً از رجیستری خارج نماید در اجرای برنامه با خطای تصویر ضمیمه مواجه میشود .
من برای اینکه بفهمم که شماره این خطا چی است و اینکه متن خطا را به صورت سفارشی به فارسی تبدیل نمایم ، کد کنترل خطا را در رویداد Load فرم قرار میدهم اما در اجرا باز هم خطای فوق ظاهر میشود .
با این توضیحات اگر راهی باشد که در صورت جابجائی پوشه برنامه ، محل اصلی و اولیه نصب برنامه اطلاع داده شود و یا اگر کامپوننت های برنامه از حالت رجیستری خارج شده باشد به کاربر اعلام شود که کامپوننت ها نیاز به رجیستری دارند عملی حرفه ای توسط برنامه نویس صورت گرفته است .
با تشکر

meys34
دوشنبه 17 اسفند 1394, 10:52 صبح
سلام

از Refrence تابع TypeLib Information رو اضافه کنید...

Public Function IsRegistered(ByVal ocxFileName As String) As Boolean
Dim t As TypeLibInfo
Dim tlin2 As TLI.TypeLibInfo

Set t = TLI.TypeLibInfoFromFile(ocxFileName)
On Error Resume Next
Set tlin2 = TLI.TypeLibInfoFromRegistry(t.Guid, t.MajorVersion, t.MinorVersion, t.LCID)

IsRegistered = Not tlin2 Is Nothing
End Function

TypeLibInfoFromFileتابع خیلی جالبی هست بدون رجیستر کردن اطلاعات اون کامپوننت رو مثل Guid و ... میده

منبع:
http://forums.codeguru.com/showthread.php?15027-Is-it-Registered

nazanin_90
دوشنبه 17 اسفند 1394, 13:09 عصر
سلام

از Refrence تابع TypeLib Information رو اضافه کنید...

Public Function IsRegistered(ByVal ocxFileName As String) As Boolean
Dim t As TypeLibInfo
Dim tlin2 As TLI.TypeLibInfo

Set t = TLI.TypeLibInfoFromFile(ocxFileName)
On Error Resume Next
Set tlin2 = TLI.TypeLibInfoFromRegistry(t.Guid, t.MajorVersion, t.MinorVersion, t.LCID)

IsRegistered = Not tlin2 Is Nothing
End Function

TypeLibInfoFromFileتابع خیلی جالبی هست بدون رجیستر کردن اطلاعات اون کامپوننت رو مثل Guid و ... میده

منبع:
http://forums.codeguru.com/showthread.php?15027-Is-it-Registered
سلام
ضمن تشکر از توجهتون جناب meys34 (http://barnamenevis.org/member.php?72486-meys34)
کدهای جنابعالی را در یک نمونه قرار دادم و رویداد کمند باتن به این صورت کدها را قرار داده ام :



If IsRegistered("ANIGIF.OCX") = True Then
MsgBox "ok"
Else
MsgBox "no"
End If


درکد بالا شرط گذاشته ام که اگر کامپوننت ANIGIF.OCX رجیستری شده پیغام ok وگرنه پیغام no صادر شود ولی در همان ابتدا از کد t As TypeLibInfo ایراد گرفته میشود .

meys34
دوشنبه 17 اسفند 1394, 14:54 عصر
در همان ابتدا از کد t As TypeLibInfo ایراد گرفته میشود .

احتمالا فراموش کردید:


از Refrence تابع TypeLib Information رو اضافه کنید...

گزینه زیر را فعال کنید:

Project>Refrences>TypeLib Information>OK

nazanin_90
دوشنبه 17 اسفند 1394, 16:47 عصر
با سلام و تشکر از جناب meys34
عالی بود :تشویق::تشویق::تشویق:

niko2008
چهارشنبه 19 اسفند 1394, 11:33 صبح
احتمالا فراموش کردید:


گزینه زیر را فعال کنید:

Project>Refrences>TypeLib Information>OK



دوست عزیز من او رفرنس رو (TypeLib Information) ندارم میشه راهنمایی کنید

meys34
چهارشنبه 19 اسفند 1394, 11:48 صبح
موقع نصب ویژوال بیسیک باید نصب می شده... حالا چرا ندارید نمی دونم شاید از سرویس پک ویژوال بوده...

این فایل رو از سیستم خودم آپلود کردم...