หลังจากที่คุณพัฒนาซอฟต์แวร์แอปพลิเคชันเสร็จสิ้นคุณต้องสร้างตัวติดตั้งที่เป็นมาตรฐานสำหรับซอฟต์แวร์ .
บทความในหนังสือพิมพ์หลายฉบับแนะนำวิธีการหลายอย่างในการใช้งาน InstallShield และซอฟต์แวร์เครื่องมืออื่น ๆ เพื่อสร้างโปรแกรมการติดตั้ง รูปแบบเดียว ในความเป็นจริงขั้นตอนการทำงานหลายอย่างของตัวติดตั้งนั้นค่อนข้างคงที่ดังนั้นเราจึงสามารถเขียนตัวติดตั้งด้วยตนเอง ต่อไปนี้คือการแนะนำรายละเอียดเกี่ยวกับวิธีการใช้ 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 ไอคอน C: /resdemo/setup.ico
ขั้นตอนที่ 2: ใช้ BRCC32 เพื่อรวบรวมและสร้างไฟล์ทรัพยากร myres.res
brcc32.exe myres.rc
2. เขียนรหัสโปรแกรมการติดตั้ง
ขั้นตอนที่ 1: เพิ่มคำสั่ง {$ r mymyres.res} ลงในไฟล์ setup.dpr เพื่อให้ไฟล์ทรัพยากรรวมอยู่เมื่อรวบรวมไฟล์
ขั้นตอนที่ 2: เขียนอินเทอร์เฟซพื้นหลังสำหรับการติดตั้งโปรแกรม
// เอฟเฟกต์การไล่ระดับสีของอินเทอร์เฟซทำได้โดยการแปรงบล็อกสี่เหลี่ยมที่อยู่ติดกันตามลำดับด้วยแปรงไล่ระดับสี
// อินเทอร์เฟซการติดตั้งกับเอฟเฟกต์พิเศษอื่น ๆ สามารถรับรู้ได้
var i, j: จำนวนเต็ม;
DCT: Trect;
เริ่ม
Form1.WindowState: = WSMaximized;
j: = form1.width;
// รับความสูงแบบฟอร์ม
สำหรับ i: = 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, '' ระบบการจัดการหลักสูตรมหาวิทยาลัยหนิงโบ V1.0 '');
// เติมสี
จบ;
จบ;
ขั้นตอนที่ 3: สร้างไดเรกทอรีการทำงานของโปรแกรมหลัก
// ตั้งค่าสภาพแวดล้อมไดเรกทอรีและไฟล์การกำหนดค่า
ถ้าไม่ใช่ directoryexists (edtdir.text) แล้ว
// ถ้า MessageBox (getFocus, '' ไดเรกทอรีนี้ไม่มีอยู่มันถูกสร้างขึ้นหรือไม่ '', '', '' '' '', 1) = idok แล้ว
พยายาม
Forcedirectories (edtdir.text);
ยกเว้น
MessageBox (getFocus, '' สร้างไดเรกทอรีล้มเหลว! '', '' ข้อมูล '', 0);
ออก;
จบ
// อื่นออก;
// modalresult: = mrok;
ขั้นตอนที่ 4: สร้างไฟล์การกำหนดค่าโปรแกรมหลัก
ตัวแปร:
วาจา
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: กู้คืนไฟล์ที่เกี่ยวข้องจากไฟล์ทรัพยากร
ตัวแปร:
วาจา
Res: 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);
Res.free;
// กู้คืนไฟล์โปรแกรมหลักจากไฟล์ทรัพยากร
resNewName: = trim (frmpathselect.edtdir.text)+''/tnbdemo.exe '';
resname: = '' mydbapp '';
res: = tresourcestream.create (Hinstance, resname, pchar ('' mydbappfile ''));
res.savetofile (resnewname);
Res.free;
// เขียนชื่อพา ธ ของโปรแกรมหลักและข้อมูลชื่อไฟล์ดำเนินการในรีจิสทรีเพื่อให้
// ใช้เมื่ออัพเกรดโปรแกรมหลัก
Regfile: = treginifile.create;
regfile.rootkey: = hkey_local_machine;
regfile.writestring ('' ซอฟต์แวร์/mynb '', '' exepath '', trim (resnewname));
Regfile.free;
จบ
ขั้นตอนที่ 6: ติดตั้งไดรเวอร์ฐานข้อมูล (สอดคล้องกับ setp 4)
// การติดตั้งไดรเวอร์ฐานข้อมูล
วาจา
cmdlinepchar: อาร์เรย์ [0..120] ของถ่าน;
StartupInfo: TStartupInfo;
ProcessInfo: tprocessinformation;
เริ่ม
Screen.cursor: = crhourglass;
strpcopy (cmdlinepchar, trim (frmpathselect.edtdir.text)+'' /mdac_typ.exe /q '');
Fillchar (startupinfo, sizeof (startupinfo),#0);
ด้วย startupinfo do
เริ่ม
CB: = sizeof (startupinfo);
dwflags: = startf_useshowwindow หรือ startf_usestdhandles;
wshowwindow: = sw_hide; // ซ่อนหน้าต่างโปรแกรมที่เรียกว่า
จบ;
ถ้า createProcess (ไม่มี, cmdlinepchar, nil, nil, true, 0, nil, nil, startupinfo, processInfo) แล้ว
// สร้างกระบวนการ
เริ่ม
WaitforsingleObject (processInfo.hprocess, ไม่มีที่สิ้นสุด);
จบ
อื่น
เริ่ม
ออก;
จบ;
Screen.cursor: = Crdefault;
DELETEFILE (PCHAR (TRIM (frmpathselect.edtdir.text)+''/mdac_typ.exe ''));
จบ;
ขั้นตอนที่ 7: สร้างกลุ่มโปรแกรม
ตัวแปร:
วาจา
Smacro: String;
Szmacro: Array [0..254] ของ Char;
SGROUPDESC, SGROUPNAME: String;
Sprogdesc: String;
Sprogicon: String;
// สร้างกลุ่มโปรแกรมหลัก
// เปิดช่องบทสนทนา
ถ้า ddeclientconv1.openlink แล้ว
เริ่ม
// สร้างกลุ่ม
SGROUPDESC: = '' ระบบการจัดการหลักสูตรมหาวิทยาลัยหนิงโบ '
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: = '' ระบบการจัดการหลักสูตรมหาวิทยาลัยหนิงโบ '' ';
smacro: = '' [additem (''+sprogicon+'', ''+sprogdesc+'')] '';
strpcopy (Szmacro, Smacro);
ddeclientconv1.executemacro (szmacro, false);
ddeclientconv1.closelink;
จบ;
ขั้นตอนที่ 8: สร้างทางลัดเดสก์ท็อป
// ใช้ shlobj, comobj, activex;
วาจา
tmpobject: iunknown;
TMPSLINK: Ishelllink;
tmppfile: ipersistfile;
PIDL: PitemidList;
StartupDirectory: Array [0..Max_Path] ของ Char;
startupfilename: String;
linkfilename: กว้างที่สุด;
C1: Thandle;
เริ่ม
startUpfilename: = '' 'tnbdemo.exe' '' '';
tmpObject: = createComobject (clsid_shelllink);
tmpslink: = tmpobject เป็น ishelllink;
tmppfile: = tmpobject เป็น ipersistfile;
tmpslink.setpath (pchar (startupfilename));
TMPSLink.SetWorkingDirectory (PCHAR (ExtractFilePath (startUpFilename)));
ShgetSpecialFolderLocation (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 '', '' ผู้จัดการโปรแกรม ''), 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);
จบ;
ข้างต้นเป็นส่วนคำสั่งหลักของโปรแกรมซึ่งถูกตัดออกจากระบบการพัฒนาของฉันและใช้การโทร Win API ในระหว่างกระบวนการติดตั้งคุณสามารถสร้างอินเทอร์เฟซที่รวดเร็วและแต่ละขั้นตอนตามความต้องการของคุณ