Setelah Anda menyelesaikan pengembangan perangkat lunak aplikasi, Anda juga perlu membuat penginstal standar untuk perangkat lunak ini .
Banyak artikel surat kabar memperkenalkan banyak metode menggunakan InstallShield dan perangkat lunak alat lainnya untuk membuat program instalasi gaya tunggal; Faktanya, beberapa langkah yang berjalan dari penginstal relatif tetap, sehingga kami dapat menulis penginstal sendiri. Berikut ini adalah pengantar terperinci tentang cara menggunakan Delphi untuk menulis program instalasi dengan karakteristik perangkat lunaknya sendiri.
Beberapa prinsip yang perlu dicapai pemasang, seperti konfigurasi satu kali, telah diperkenalkan di majalah terkait, jadi saya tidak akan dijelaskan secara rinci. Di sini kami terutama memperkenalkan beberapa proses utama dalam penulisan penginstal:
1. Buat program yang perlu diinstal ke dalam file sumber daya
Langkah 1: Tulis file skrip sumber daya myres.rc, yang dapat ditulis dengan notepad, dll.
Mydbsrc mydbsrcfile c: /resdemo/mynbdb.mdb
Mydbjet mydbjetfile c: /resdemo/mdac_typ.exe
Mydbapp mydbappfile c: /resdemo/tnbdemo.exe
7001 Ikon C: /ResDemo/Setup.ico
Langkah 2: Gunakan BRCC32 untuk mengkompilasi dan menghasilkan file sumber daya myres.res.
BRCC32.EXE MYRES.RC
2. Tulis kode program instalasi
Langkah 1: Tambahkan pernyataan {$ R mymyres.res} ke file setup.dpr, sehingga file sumber daya disertakan saat menyusun file.
Langkah 2: Tulis antarmuka latar belakang untuk menginstal program.
// Efek gradien warna antarmuka dicapai dengan menyikat blok persegi panjang yang berdekatan secara berurutan dengan kuas gradien.
// Antarmuka instalasi dengan efek khusus lainnya juga dapat direalisasikan.
Var I, J: Integer;
DCT: Trect;
Mulai
Form1.WindowState: = WSmaximized;
J: = form1.width;
// Dapatkan tinggi bentuk
untuk i: = 0 hingga 255 lakukan
// Tetapkan nilai warna di RGB () di sini
Mulai
Canvas.brush.color: = rgb (0,0,255-i);
// Warna sikat persegi panjang ditarik setiap kali (kiri, atas, kanan, bawah)
// dct: = rect (i*2,0, (i+1)*2, j);
Dct: = rect (0, i*2, j, (i+1)*3);
// area persegi panjang untuk setiap menyikat
Canvas.fillrect (DCT);
Form1.canvas.textrect (DCT, 30,40, '' Ningbo University Courseware Management System v1.0 '');
// Isi warna
akhir;
akhir;
Langkah 3: Buat direktori kerja program utama
// Atur File Lingkungan dan Konfigurasi Direktori
Jika bukan DirectoryExists (edtdir.text) maka
// Jika pesan pesan (getFocus, '' direktori ini tidak ada, apakah itu dibuat? '', '', '' pertanyaan '', 1) = idok kemudian
mencoba
Forcedirectory (edtdir.text);
kecuali
MessageBox (GetFocus, '' Create Directory Gagal! '', '' Informasi '', 0);
KELUAR;
akhir
// keluar dari keluar;
// ModalResult: = mrok;
Langkah 4: Hasilkan file konfigurasi program utama
Variabel:
var
setupInfo: tinifile;
// Konfigurasikan jalur kerja data saat ini dan pilih driver yang terkait dengan sistem Anda.
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;
Langkah 5: Kembalikan file yang relevan dari file sumber daya.
Variabel:
var
Res: Tresourcestream;
resname, resnewName: string;
Regfile: Treginifile;
Mulai
// Kembalikan file database dari file sumber daya
resnewName: = trim (frmpathselect.edtdir.text)+''/mynbdb.mdb '';
resname: = '' mydbsrc '';
res: = tresourcestream.create (hinstance, resname, pchar ('' mydbsrcfile ''));
res.savetofile (resnewName);
res.free;
// Kembalikan file program utama dari file sumber daya
resnewName: = trim (frmpathselect.edtdir.text)+''/tnbdemo.exe '';
resname: = '' mydbapp '';
res: = tresourcestream.create (hinstance, resname, pchar ('' mydbappfile ''));
res.savetofile (resnewName);
res.free;
// Tulis nama jalur program utama dan informasi nama file eksekusi di registri sehingga
// digunakan saat meningkatkan program utama.
Regfile: = Treginifile.create;
Regfile.rootkey: = hkey_local_machine;
Regfile.writeString ('' software/mynb '', '' exePath '', trim (resnewName));
Regfile.Free;
akhir
Langkah 6: Instal Driver Database (sesuai dengan SETP 4)
// menginstal driver database
var
cmdlinepchar: array [0..120] dari char;
startupInfo: tstartupInfo;
ProcessInfo: TProcessInformation;
Mulai
screen.cursor: = crhourglass;
strpcopy (cmdlinepchar, trim (frmpathselect.edtdir.text)+'' /mdac_typ.exe /q '');
fillchar (startupinfo, sizeof (startupInfo),#0);
dengan startupinfo lakukan
Mulai
CB: = sizeof (startupInfo);
dwflags: = startf_useshowwindow atau startf_usestdhandles;
WshowWindow: = SW_HIDE;
akhir;
Jika createProcess (nil, cmdlinepchar, nil, nil, true, 0, nil, nil, startupinfo, processInfo) lalu
// buat proses
Mulai
WaitForSingleObject (ProcessInfo.hprocess, Infinite);
akhir
kalau tidak
Mulai
KELUAR;
akhir;
screen.cursor: = crdefault;
DeleteFile (pchar (trim (frmpathselect.edtdir.text)+''/mdac_typ.exe ''));
akhir;
Langkah 7: Buat grup program
Variabel:
var
smacro: string;
szmacro: array [0..254] dari char;
Sgroupdesc, sgroupName: string;
sprogdesc: string;
Sprogicon: String;
// Buat grup program utama
// buka saluran dialog
Jika ddeclientConv1.openlink maka
Mulai
// Buat grup
SGroupdesc: = '' Sistem Manajemen Courseware Universitas Ningbo '';
SGroupName: = '' Sistem Manajemen Courseware Universitas Ningbo v1.0 '';
// buat makro
smacro: = '' [createGroup (''+sgroupdesc+'', ''+sgroupName+'')] '';
strpcopy (szmacro, smacro);
ddeclientConv1.executemacro (szmacro, false);
// Buat gambar ikon
sprogicon: = trim (frmpathselect.edtdir.text)+''/tnbdemo.exe '' ;;
Sprogdesc: = '' Sistem Manajemen Courseware Universitas Ningbo '';
smacro: = '' [additem (''+sprogicon+'', ''+sprogdesc+'')] '';
strpcopy (szmacro, smacro);
ddeclientConv1.executemacro (szmacro, false);
ddeclientConv1.closelink;
akhir;
Langkah 8: Buat pintasan desktop
// Menggunakan shlobj, comobj, ActiveX;
var
TMPObject: iunknown;
tmpslink: Ishelllink;
TMPPFILE: IPERSISTFILE;
PIDL: Pitemidlist;
Startupdirectory: array [0..max_path] dari char;
StartupFileName: String;
LinkFileName: wideestring;
C1: Thandle;
Mulai
StartupfileName: = '' '' tnbdemo.exe '' '' ';
tmpObject: = createComObject (clsid_shelllink);
tmpslink: = tmpObject sebagai ishelllink;
TMPPFILE: = TMPObject sebagai 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 '', '' manajer program ''), 0, '' shelldll_defview '', '' ''), 0, '' syslistview32 ' ',' '' '');
PostMessage (C1, WM_KEYDOWN, VK_F5,0);
PostMessage (C1, WM_KEYUP, VK_F5,1 SHL 31);
akhir;
Langkah 9: Mulai ulang mesin
Mulai
ExitWindowsex (2,0);
akhir;
Di atas adalah bagian pernyataan utama dari program ini, yang terputus dari sistem pengembangan saya dan menggunakan beberapa panggilan API Win. Selama proses instalasi, Anda dapat membuat beberapa antarmuka yang cepat dan setiap langkah sesuai dengan kebutuhan Anda.