السلام عليكم ورحمة الله وبركاته
تحية طيبة لكم
مشكلتي أني قمت بتصميم برنامج وقمت بعمل تحزيم له ببرنامج Setup Factory 7
وتأكد من جميع ملفات DLL و OCX التي يحتاجها البرنامج ووضعتها في الباكيج من مسارها .
وقمت بتجربة البرنامج على النحو التالي :
1- من المشروع مباشرة (( يعمل ))
2- على جهازي نفسه بعد فكّه من الحزمة (( لا يعمل ؟؟ ))
3- على أجهزة العملاء (( يعمل على بعضها والبعض الآخر لا يعمل ))
ولكي يكون سؤالي أكثر شمولية ، فكما ذكرت أني جربته على جهازي ولم يعمل حيث عند تشغيل البرنامج تتحول صورة مؤشر الفأرة إلى شكل الساعة الرملية
ثم تعود كما كانت ، وأبحث عن البرنامج في الباك جراوند ولا أجده وهذا يعني أنه لم يعمل .
أما على أجهزة العملاء ، فبعض الأجهزة يعمل عليها والبعض الآخر لا يعمل كما هو الحال في جهازي .
وطبعاً من البروجيكت يعمل بكفاءة عالية بدون أية مشاكل .
وللمعلومية البرنامج مصمم بإصدارة رقم 6 وهو لا يرتبط بأي شبكة .
ألا ترون أن المشكلة غريبة ، حيث أنه يعمل على أجهزة وأخرى لا يعمل عليها ولا تظهر أي رسالة خطأ .
وللمعلومية أيضاً ، أستخدم عند تشغيل البرنامج mutex الخاصة بمنع تشغيل البرنامج أكثر من مرة ، وهذا هو الكود الخاص به :
class يسمى بـ : clsMutex :
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, ByVal lpName As String) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Private Const ERROR_ALREADY_EXISTS = 183& Private m_hMutex As Long Public Function CheckMutex(MutexName As String) As Boolean Dim s As SECURITY_ATTRIBUTES m_hMutex = CreateMutex(s, 0, MutexName) If Err.LastDllError = ERROR_ALREADY_EXISTS Then CheckMutex = False Else CheckMutex = True End If End Function Private Sub Class_Terminate() CloseHandle m_hMutex End Sub
والكود التالي في حدث Form_Load عند بدء تشغيل البرنامج :
اقتباسDim mut As clsMutex ' هذا التعريف في General طبعاًSet mut = New clsMutex
If Not mut.CheckMutex("ProgNa") Then '
MsgBox "لا يمكن تشغيل أكثر من نسخة للبرنامج", vbCritical, "خطأ"
End
End If
وإذا قال أحدكم أن المشكلة تكمن في الميوتكس ، ويجب عليك استخدام APP.PrevInstance فأقول له لا تخف جربتها ونفس الشئ ، يعمل على أجهزة وأخرى لا يعمل
أرجو من الله ثم منكم أن تجدو لي حل لهذه المشكلة الغريبة والمعقدة ...
ودمتم سالمين إن شاء الله
محبكم
