الانتقال إلى المحتوى

توقيف البرنامج بعد مدة


man alman

Recommended Posts

السلام عليكم الاعضاء الكرام
أود الاستفسار عن الفكرة وكذلك الطريقة لجعل البرنامج يتوقف بعد مدة معينة(ايام ,اسابيع) أو بعد ادخال عدد معين من الحقول كمايفعل بعض المبرمجين في البرامج التجريبية.
وجزاكم الله خيرا

تم تعديل بواسطة man alman
رابط هذا التعليق
شارك

يمكنك ذلك
فعند الدخول على البرنامج ممكن خلال فانكشن تحصل على عدد السجلات في الاسكيما فلو مثلا زادت عن رقم حدده انت يتم الخروج طبعا باستخدم if----then
وتضعه في لحظة التأكد مثلا من ان اسم المستخدم والباسورد صحيحية والدخول الى البرنامج طبعا ده في الفورم
وخذ هذه الفانكشن التي بتجيب عدد السجلات في الاسكيما

CREATE OR REPLACE FUNCTION SCOTT.get_count_all
RETURN NUMBER
IS
CURSOR c1
IS
SELECT table_name
FROM user_tables; v_sql LONG;
v_count NUMBER := 0;
v_count_all NUMBER := 0;
BEGIN FOR rec IN c1
LOOP
v_sql := 'SELECT COUNT(1) FROM ' || rec.table_name;
EXECUTE IMMEDIATE v_sql
INTO v_count; v_count_all := v_count_all + v_count;
END LOOP;
RETURN v_count_all;
EXCEPTION
WHEN OTHERS
THEN
RETURN -1;
END;
/

رابط هذا التعليق
شارك

  • بعد 6 شهور...

الاخ MAN ALMAN
الله يعطيك العافية يبدو ان هناك موضوع مشترك نهتم به نحن الاثنين و ساكون انشالله معك اول باول فور الحصول على المستجدات التي تتعلق بحماية البرنامج من النسخ
اما عن طريق ملفات الريجيستري او عن طريق السيريال الخاص باللوحة الام او الخاص بالهاردديسك او عن طريق التشييك على ملف معين موجود على السيرفر .. الخ و سأوافيك بكل ما أصل اليه في هذا الموضوع ، و ارجو منك و من الاخوة اللذين سبقونا في هذا المجال تزويدنا بمعلومات تفصيلية عن هذه الجزيئيات

بالنسبة لتوقف البرنامج عن العمل بعد تاريخ معين توصلت لحل بسيط و فعال وانشالله يكون مخرج لسؤالك

في البداية ننشئ فيه حقلين
الاول نخزن فيه التاريخ الذي سيتوقف البرنامج من بعده
والثاني حقل نعمل UPDATE اذا دخل هذا التاريخ ليصبح 'ACTIVE' في مرحلة معينة

CREATE TABLE CLOSE_SYSTEM
(
CLOSE_DATE DATE,
STATUS VARCHAR2(15)
);



وعند فتح البرنامج تعمل تشييك بسيط على TRIGGER WHEN-NEW-FORM-INSTANCE


IF SYSDATE >= CLOSE_DATE THEN
UPDATE  CLOSE_SYSTEM SET STATUS = 'ACTIVE';
COMMIT;
EXIT_FORM;
RAISE Form_Trigger_Failure;
--
--
--
--



وبالامكان ايقاف البرنامج ايضا في حالة محاولة ارجاع تاريخ السيرفر الى الخلف كمحاولة للتحايل للاستفادة من البرنامج قدر الامكان

DECLARE
VARIABLE  varchar2(80);

BEGIN BEGIN SELECT STATUS 
INTO VARIABLE FROM   CLOSE_SYSTEM;
EXCEPTION WHEN OTHERS THEN 
EXIT_FORM;
RAISE Form_Trigger_Failure;
END;

IF VARIABLE = 'ACTIVE' 
	THEN 
	EXIT_FORM;
	RAISE Form_Trigger_Failure;
	---
	---
	---
END IF;
END;



وبامكانك ان تطور الكود و تظهر بعض الرسائل الخاصة بك ، وإليك هذه الفكرة بامكانك حذف ملفات الـ FMX من جهاز السيرفر


DECLARE
VARIABLE  varchar2(80);
.
.
.

IF VARIABLE = 'ACTIVE' 
	THEN 
..
..
HOST('DEL *.FMX');
..
..
	EXIT_FORM;
	RAISE Form_Trigger_Failure;
	---
	---
	---
END IF;
END;



وتقبل تحياتي

تم تعديل بواسطة orefai
رابط هذا التعليق
شارك

اما بالنسبة لحماية البرنامج من النسخ عن طريق التشييك على ملف موجود في مكان معين على السيرفر


فهذا شرح لخطوات هذه العملية

سننشئ ملف نصي عادي و نكتب فيه نص معين يمكنك فيما بعد اجراء بعض العمليات علية ، ونسميه باسم TXT_1
ونحفظه في باث معين و لنفرض انه على السي مباشرة
ثم بعد ذلك نحاول فتح الملف و القراءة منه في الفورم في TRIGGER WHEN-NEW-FORM-INSTANCE
DECLARE
  in_file   text_IO.file_type;
  linebuf   VARCHAR2 (80);
BEGIN in_file := text_io.fopen ('c:\TXT_1', 'r');

  TEXT_IO.Get_line (in_file, linebuf);
  :BLOCK1.ITEM1 := :BLOCK1.ITEM1 || linebuf || CHR (20);
EXCEPTION
  WHEN OTHERS THEN
     EXIT_FORM;
     RAISE Form_Trigger_Failure;
END;



هذا و أرجو من الجميع التفاعل , و بانتظار مشاركاتكم و افكاركم و ابداعاتكم ايها الاخوة الأفاضل فيما يتعلق في حماية البرنامج
ولي عندكم طلب بسيط : ياحبذا ان تكون المشاركات فيها شئ من التفصيل و تقبلو تحياتي

تم تعديل بواسطة orefai
رابط هذا التعليق
شارك

اما بالنسبة للآلية حماية البرنامج عن طريق التشييك على السيريال والموديل الخاص بالهارد ديسك فبامكانك فتح الرابط التالي



http://www.araboug.org/ib/index.php?showtopic=30598

وهي مشاركة من الزميل rmoplusx و الطريقة مجربة و اتمنى ان تعم الفائدة

وتقبلو تحياتي

رابط هذا التعليق
شارك

أما بالنسبة لآلية حماية البرنامج عن طريق التأكد من عدم تغيير الداتابيز و تحميلها إلى داتابيز اخرى فإليك هذه الفكرة من مشاركة الأخ

mageed_ahmed منقولة بتصرف


ويشترط أن يكون للمستخدم صلاحية
select from table : V$database
أولا يجب حفظ الكود تماما بحيث لا يصل ليد احد (عمل كل الاحتياطات اللازمة لمنع نسخ SOURCE CODE LIKE FMB's)

ثانيا
قم باختيار DB ID من جدول V$database

هذا الرقم لا يتكرر في اي قاعدة بيانات بضمان اوراكل

في شاشة login قبل الدخول اختبر القيمة اذا كانت هي نفس قيمتها الفعليه دعه يدخل وان لم تتحقق امنعه من الدخول
واليك المثال التالي

DECLARE
  l_dbid             NUMBER;
  l_created          DATE;
  l_DB_UNIQUE_NAME   VARCHAR2 (30);
BEGIN SELECT   DBID, TO_CHAR (CREATED, 'dd/mm/yyyy'), DB_UNIQUE_NAME
    INTO l_dbid, l_created, l_DB_UNIQUE_NAME
    FROM v$database; IF (l_dbid <> 9874568215)AND (l_created <> '15/09/2009')AND (l_DB_UNIQUE_NAME <> 'ORCL')
  THEN
     --
     -- 
     --
     :BLOCK1.ITEM1 := 'Un-utharized copy of databse';
      EXIT_FORM;
      RAISE FORM_TRIGGER_FAILURE;
     --
     --
     --
  END IF;
END;


تم تعديل بواسطة orefai
رابط هذا التعليق
شارك

  • بعد 7 سنة...

الاخ MAN ALMAN

الله يعطيك العافية يبدو ان هناك موضوع مشترك نهتم به نحن الاثنين و ساكون انشالله معك اول باول فور الحصول على المستجدات التي تتعلق بحماية البرنامج من النسخ

اما عن طريق ملفات الريجيستري او عن طريق السيريال الخاص باللوحة الام او الخاص بالهاردديسك او عن طريق التشييك على ملف معين موجود على السيرفر .. الخ و سأوافيك بكل ما أصل اليه في هذا الموضوع ، و ارجو منك و من الاخوة اللذين سبقونا في هذا المجال تزويدنا بمعلومات تفصيلية عن هذه الجزيئيات

 

بالنسبة لتوقف البرنامج عن العمل بعد تاريخ معين توصلت لحل بسيط و فعال وانشالله يكون مخرج لسؤالك

 

في البداية ننشئ فيه حقلين

الاول نخزن فيه التاريخ الذي سيتوقف البرنامج من بعده

والثاني حقل نعمل UPDATE اذا دخل هذا التاريخ ليصبح 'ACTIVE' في مرحلة معينة

 

 

CREATE TABLE CLOSE_SYSTEM
(
CLOSE_DATE DATE,
STATUS VARCHAR2(15)
);

وعند فتح البرنامج تعمل تشييك بسيط على TRIGGER WHEN-NEW-FORM-INSTANCE

 

 

IF SYSDATE >= CLOSE_DATE THEN
UPDATE CLOSE_SYSTEM SET STATUS = 'ACTIVE';
COMMIT;
EXIT_FORM;
RAISE Form_Trigger_Failure;
--
--
--
--

وبالامكان ايقاف البرنامج ايضا في حالة محاولة ارجاع تاريخ السيرفر الى الخلف كمحاولة للتحايل للاستفادة من البرنامج قدر الامكان

 

DECLARE
VARIABLE varchar2(80);

BEGIN BEGIN SELECT STATUS
INTO VARIABLE FROM CLOSE_SYSTEM;
EXCEPTION WHEN OTHERS THEN
EXIT_FORM;
RAISE Form_Trigger_Failure;
END;

IF VARIABLE = 'ACTIVE'
THEN
EXIT_FORM;
RAISE Form_Trigger_Failure;
---
---
---
END IF;
END;

وبامكانك ان تطور الكود و تظهر بعض الرسائل الخاصة بك ، وإليك هذه الفكرة بامكانك حذف ملفات الـ FMX من جهاز السيرفر

 

 

DECLARE
VARIABLE varchar2(80);
.
.
.

IF VARIABLE = 'ACTIVE'
THEN
..
..
HOST('DEL *.FMX');
..
..
EXIT_FORM;
RAISE Form_Trigger_Failure;
---
---
---
END IF;
END;

وتقبل تحياتي

السلام عليكم استاذ 

orefai

لكن نفترض ان المستخدم ادخل تاريخ اكبر من تاريخ غلق البرنامج بالخطا وقتها البرنامج يقفل و دى كارثة

المفترض ان احنا نفكر فى طريقة نعد فيها عدد الايام المتاحة لاستخدام البرنامج و بعدها نغلق البرنامج( مثلا البرنامج شغال لمدة شهر يعنى 30 يوم)

يعنى احنا محتاجين جدول فيه تاريح بداية الترخيص و نهايته و محتاجين field تاريخ غير تاريخ الجهاز ولا السيرفر علشان نشيك بيه

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية