بعد إكمال تطوير برنامج التطبيق ، تحتاج إلى إنشاء مثبت موحد للبرمجة .
تقدم العديد من مقالات الصحف العديد من طرق استخدام برنامج التثبيت وبرامج الأدوات الأخرى لإنشاء برامج التثبيت نمط واحد ؛ في الواقع ، تكون خطوات التشغيل العديدة للمثبت ثابتة نسبيًا ، حتى نتمكن من كتابة المثبت بأنفسنا. فيما يلي مقدمة مفصلة عن كيفية استخدام Delphi لكتابة برنامج تثبيت مع خصائص البرمجيات الخاصة به.
تم تقديم العديد من المبادئ التي يحتاجها المثبتون ، مثل التكوين لمرة واحدة ، في المجلات ذات الصلة ، لذلك لن يتم وصفها بالتفصيل. هنا نقدم بشكل أساسي العديد من العمليات الرئيسية في كتابة المثبت:
1. اصنع البرنامج الذي يحتاج إلى تثبيت في ملفات الموارد
الخطوة 1: اكتب ملف نص مورد myres.rc ، والذي يمكن كتابته بواسطة Notepad ، إلخ.
mydbsrc mydbsrcfile c: /resdemo/mynbdb.mdb
mydbjet mydbjetfile c: /resdemo/mdac_typ.exe
mydbapp mydbappfile c: /resdemo/tnbdemo.exe
7001 Icon C: /Resdemo/setup.ico
الخطوة 2: استخدم BRCC32 لتجميع وإنشاء ملف الموارد myres.res.
brcc32.exe myres.rc
2. اكتب رمز برنامج التثبيت
الخطوة 1: أضف عبارة {$ r mymyres.res} إلى ملف setup.dpr ، بحيث يتم تضمين ملف المورد عند تجميع الملف.
الخطوة 2: اكتب واجهة الخلفية لتثبيت البرنامج.
// يتم تحقيق تأثير تدرج لون الواجهة عن طريق تنظيف الكتل المستطيلة المجاورة بالتسلسل مع فرش التدرج.
// يمكن أيضًا تحقيق واجهة التثبيت مع المؤثرات الخاصة الأخرى.
var i ، j: integer ؛
DCT: TRECT ؛
يبدأ
form1.WindowState: = wsmaximized ؛
J: = form1.width ؛
// احصل على ارتفاع النموذج
لأني: = 0 إلى 255 تفعل
// اضبط قيمة اللون في RGB () هنا
يبدأ
canvas.brush.color: = rgb (0،0،255-i) ؛
// يتم رسم لون الفرشاة للمستطيل في كل مرة (يسار ، أعلى ، يمين ، أسفل)
// dct: = rect (i*2،0 ، (i+1)*2 ، j) ؛
DCT: = rect (0 ، i*2 ، j ، (i+1)*3) ؛
// مساحة مستطيلة لكل تفريش
canvas.fillRect (DCT) ؛
form1.canvas.textrect (DCT ، 30،40 ، '' Ningbo University Courseware Management System v1.0 '') ؛
// ملء اللون
نهاية؛
نهاية؛
الخطوة 3: إنشاء دليل عمل البرنامج الرئيسي
// تعيين بيئة الدليل وملفات التكوين
إذا لم يكن الدليل (edtdir.text) ثم
// إذا كان MessageBox (getFocus ، "هذا الدليل غير موجود ، هل تم إنشاؤه؟" ، "،" سؤال "، 1) = idok ثم
يحاول
القسري (edtdir.text) ؛
يستثني
MessageBox (getFocus ، '' Create Directory Failtory! '،' 'Information' '، 0) ؛
مخرج؛
نهاية
// مخرج آخر ؛
// ModalResult: = Mrok ؛
الخطوة 4: إنشاء ملف تكوين البرنامج الرئيسي
عامل:
var
SetupInfo: Tinifile ؛
// قم بتكوين مسار عمل البيانات الحالي وحدد برنامج التشغيل المتعلق بنظامك.
setupinfo: = tinifile.create (trim (frmpathselect.edtdir.text)+''/setup.ini '') ؛
setupinfo.writeString ('' Access '' ، '' WorkDbPath '' ، trim (frmpathselect.edtdir.text)+''/mynbdb.mdb '' ؛
setupinfo.writeString ('' Access '' ، '' Backdbpath '، trim (frmpathselect.edtdir.text)+' '/mynbdbbak.mdb') ؛
setupinfo.free ؛
الخطوة 5: استعادة الملفات ذات الصلة من ملف المورد.
عامل:
var
الدقة: tresourcestream ؛
Resname ، ResNewName: String ؛
Regfile: treginifile ؛
يبدأ
// استعادة ملف قاعدة البيانات من ملف المورد
ResNewName: = trim (frmpathselect.edtdir.text)+''/mynbdb.mdb '' ؛
resname: = '' 'mydbsrc' '؛
res: = tresourcestream.create (hinstance ، resname ، pchar ('' 'mydbsrcfile' ')) ؛
Res.Savetofile (ResNewName) ؛
الدقة.
// استعادة ملف البرنامج الرئيسي من ملف المورد
ResNewName: = trim (frmpathselect.edtdir.text)+''/tnbdemo.exe '' ؛
resname: = '' 'mydbapp' '؛
res: = tresourcestream.create (hinstance ، resname ، pchar ('' 'mydbappfile' ')) ؛
Res.Savetofile (ResNewName) ؛
الدقة.
// اكتب اسم مسار البرنامج الرئيسي ومعلومات اسم ملف التنفيذ في السجل بحيث
// المستخدمة عند ترقية البرنامج الرئيسي.
regfile: = treginifile.create ؛
Regfile.Rootkey: = HKEY_LOCAL_MACHINE ؛
regfile.writeString ('' 'Software/mynb' '،' 'exepath' ، trim (resNewName)) ؛
regfile.free ؛
نهاية
الخطوة 6: قم بتثبيت برنامج تشغيل قاعدة البيانات (المقابل لـ SETP 4)
// تثبيت برنامج تشغيل قاعدة البيانات
var
cmdlinepchar: Array [0..120] of Char ؛
StartupInfo: tstartupinfo ؛
ProcessInfo: TprocessInformation ؛
يبدأ
screen.cursor: = crhourglass ؛
strpcopy (cmdlinepchar ، trim (frmpathselect.edtdir.text)+'' /mdac_typ.exe /q '') ؛
Fillchar (StartupInfo ، SizeOf (StartupInfo) ،#0) ؛
مع startupinfo تفعل
يبدأ
CB: = sizeof (startupinfo) ؛
dwflags: = startf_useshowwindow أو startf_usestdhandles ؛
wshowwindow: = sw_hide ؛
نهاية؛
إذا كانت CreateProcess (nil ، cmdlinepchar ، nil ، nil ، true ، 0 ، nil ، nil ، startupinfo ، processInfo) ثم
// إنشاء عملية
يبدأ
WaitforsingleObject (ProcessInfo.hprocess ، Infinite) ؛
نهاية
آخر
يبدأ
مخرج؛
نهاية؛
screen.cursor: = crdefault ؛
DELETEFILE (PCHAR (trim (frmPathselect.edtdir.text)+''/mdac_typ.exe '')) ؛
نهاية؛
الخطوة 7: إنشاء مجموعة برامج
عامل:
var
Smacro: سلسلة.
Szmacro: Array [0..254] of Char ؛
Sgroupdesc ، sgroupname: String ؛
Sprogdesc: سلسلة.
Sprogicon: سلسلة.
// إنشاء مجموعة البرامج الرئيسية
// افتح قناة الحوار
إذا كان ddeclientConv1.openLink ثم
يبدأ
// إنشاء مجموعة
SGROUPDESC: = '' 'Ningbo University Courseware Management System' '؛
sgroupname: = '' 'Ningbo University Courseware Management System v1.0' '؛
// جعل الماكرو
smacro: = '' [creategroup ('' '+sgroupdesc+' '،' '+sgroupname+' ')]' ؛
strpcopy (szmacro ، smacro) ؛
ddeclientconv1.executemacro (szmacro ، false) ؛
// إنشاء صورة أيقونة
Sprogicon: = trim (frmpathselect.edtdir.text)+''/tnbdemo.exe '' ؛؛
Sprogdesc: = '' 'Ningbo University Courseware Management System' '؛
smacro: = '' [additem (''+sprogicon+'' ، ''+sprogdesc+'')] '؛
strpcopy (szmacro ، smacro) ؛
ddeclientConv1.executemacro (szmacro ، false) ؛
ddeclientConv1.Closelink ؛
نهاية؛
الخطوة 8: إنشاء اختصار لسطح المكتب
// يستخدم shlobj ، comobj ، ActiveX ؛
var
tmpobject: iunknown ؛
TMPSLINK: ISHELLLINK ؛
tmppfile: ipersistfile ؛
PIDL: PiteMidList ؛
startupdirectory: Array [0..max_path] of Char ؛
startUpFiLename: سلسلة ؛
LinkFilename: WideString ؛
C1: Thandle ؛
يبدأ
startUpFiLename: = '' '' tnbdemo.exe '' '' '؛
tmpObject: = createComObject (clsid_shelllink) ؛
tmpslink: = tmpObject كما ishelllink ؛
tmppfile: = tmpObject as ipersistfile ؛
tmpslink.setPath (pCare (startUpFiLename)) ؛
tmpslink.setWorkingDirectory (PCHAR (extractFilePath (startupFiLename)))) ؛
shgetspecialderlocation (0 ، csidl_desktopdirectory ، pidl) ؛
shgetpathfromidlist (pidl ، startupdirectory) ؛
LinkFilename: = startupdirectory + '' /mynotepad.lnk '' ؛
ShowMessage (LinkFilename) ؛
tmppfile.save (pwchar (linkfilename) ، false) ؛
C1: = windows.findwindowex (windows.findwindowex (windows.findwindow ('' 'progman' ، '' manager ') ، 0 ،' shelldll_defview '،' '' '') ، 0 ، '' syslistview32 ' '' '' '') ؛
postmessage (C1 ، WM_Keydown ، VK_F5،0) ؛
postmessage (C1 ، WM_Keyup ، VK_F5،1 SHL 31) ؛
نهاية؛
الخطوة 9: أعد تشغيل الجهاز
يبدأ
exitwindowsex (2،0) ؛
نهاية؛
ما سبق هو البيان الرئيسي جزء من البرنامج ، والذي تم قطعه من نظام التطوير الخاص بي واستخدم بعض مكالمات API Win. أثناء عملية التثبيت ، يمكنك إنشاء بعض الواجهات السريعة وكل خطوة وفقًا لاحتياجاتك.