أرشيف المدونة
منع تنفيذ البرنامج عدة مرات
السلام عليكم و رحمة الله وبركاته.
الكثير من الاخوة يسألون عن كيفية منع المستخدم من تنفيذ عدة نسخ من البرنامج في نفس الوقت, علما ان الاجابة ليست بتلك الصعوبة التي يتخيلها الكثيرون.. لن تحتاج الى التعامل مع الكيرنل او ان تطير مع العصافير سوف تحتاج فقط الى ان تجد نقطة مشتركة بين النسخ وتجعلها غير قابلة لمشاركة. جميل
- mutex
احد المبادئ في انظمة التشغيل المتعددة المسارات. حيث يستعمل في اقصاء اي عملية تريد الدخول الى المجال المحمي او ما يعرف ب
critical section — section critique
function OneInstanceMutex:Boolean; begin Hnd := OpenMutex(MUTEX_ALL_ACCESS, false, 'OneInstance'); Result := (Hnd <> 0); if Hnd = 0 then Hnd := CreateMutex(nil, false, 'OneInstance'); end;
- file
يمكن ايضا ان تعتمد مثلا على الملفات و اخطاء انشائها او القراءة منها او الكتابة فيها
جرب مثلا ان تستعمل هذا الكود و هو يقوم بانشاء ملف مؤقت ممنوع من المشاركة مع البرامج الاخرى
function CreateOnlyFile:Boolean; var FileStrct :TOFStruct; hFile :THandle; FileName :String ; begin FileName := 'tmp.tmp'; hFile := CreateFile( PAnsiChar(FileName), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ , 0, CREATE_ALWAYS , FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE, 0); if hFile = INVALID_HANDLE_VALUE then Result := True else Result := False; end;
او ربما يكون لديك ملف يحتوي على اعدادات البرنامج يمكن ان تستعمله و تفتحه على انه ممنوع على الاخرين
جرب الكود التالي
function OpenFileOnly:Boolean; var FileStrct: TOFSTRUCT; begin if OpenFile('tmp.tmp',FileStrct,OF_SHARE_DENY_READ)= HFILE_ERROR then Result := True else Result:= False; end;
هناك بالتأكيد عدة طرق اخرى لكنني اكتفي بذكر هذه الثلاثة فقط
لا تنس ان هذا الكود مرتبط بالوحدة الاساسية التي يتم فيها انشاء الصنف
Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run;
فقط قم بمناداة احدى الاجراءات قبل تلك الاسطر
لا تنس ايضا ان تعرف في بداية البرنامج
var Hnd: THandle;