M.nshawaty

45

2,338

هل حاولت كتابةبرنامج .......

برنامج يحذف نفسه!
هل حاولت كتابة برنامج يقوم بحذف نفسه؟
قد تستغرب وما فائدة هكذا برنامج وما غرض برنامج ما من حذف نفسه؟
طبعاً في عالم الحواسيب والبرمجة أغرب الأشياء ممكن أن تكون مفيدة!

مثلاً عندما نثبت برنامجاً فإنه يعطينا الخيار في إزالته (Uninstall) في أية لحظة، ويكون عادة هناك برنامج مختص بحذف كافة ملفات البرنامج وإدخالاته في التسجيل (Registry) وغير ذلك ...

لكن في النهاية وبعد حذف جميع الملفات والإعدادات تكون آخر خطوة عادة هي أن يتم
حذف هذا البرنامج الخاص بإلغاء التثبيت أيضاً فكيف سيقوم هذا البرنامج بحذف نفسه؟!

طبعاً إن حذف ملف ما ليس أمراً صعباً فبمجرد معرفة اسم ومسار الملف المطلوب حذفه نستطيع حذفه عبر أحد استدعاءات توابع النظام (API) وهو DeleteFile أو عبر تابع عالي المستوى توفره مكتبة اللغة المستخدمة، والحصول على اسم ومسار ملف البرنامج (الـ EXE) أيضاً ينطبق عليه نفس الشيء.

وبناءً على الكلام السابق فإنني أستطيع مثلاً جعل برنامجي يحذف نفسه بكتابة التعليمات:

* Visual Basic :
كود:




Dim ExeFileName As String
'We should know if App.Path ends with a trailing "\"
If Right(App.Path, 1) = "\" Then
ExeFileName = App.Path + App.EXEName + ".EXE" 'As in App.Path = "C:\"
Else
ExeFileName = App.Path + "\" + App.EXEName + ".EXE" 'As in App.Path = "C:\MyDir"
End If
Kill ExeFileName
* Delphi :

uses SysUtils, Forms;
.....
DeleteFile(Application.ExeName);
....
* C++ / C :


#include
#include

......
TCHAR szEXEPathname[_MAX_PATH];
GetModuleFileName(NULL, szEXEPathname, _MAX_PATH);
DeleteFile(szEXEPathname);
....
.

لكن الطرق السابقة لن تعمل! وستعيد الخطأ Access Denied / File Access Error.

فكما نعلم أن النظام يقوم بحماية ملف أي برنامج يتم تشغيله بمجرد تحميله إلى الذاكرة ولن يمكن حذف ملفه عندئذ إلا بعد إغلاق جميع نسخ البرنامج.
إذن نحن في حاجة إلى الالتفاف حول المشكلة وبطريقة ما نحتاج إلى تأخير عملية الحذف إلى وقت لا يكون فيه برنامجنا قيد التشغيل.
ففكروا في قليلاً طريقة لإجراء ذلك إلى حين يجهز الموضوع الذي أعدّه وأمثلته.

__________________

التعليقات (4)

مصطفى عياد     
مشششششششششكور
L.B.H     
الله يحييك يا أخي
faisalcham     

السلام عليكم ورحمة الله وبركاته
شكرا لك اخي الكريم
بارك الله فيك
تقبل تحياتي

زهير طه     
- جاري نقل الموضوع لأنه ليس له علاقة بالملفات الدفعية -
ينقل من قسم الملفات الدفعية إلى قسم الشروحات و التعليم