當你完成一個應用軟件的開發後,那麼你還需要為該軟件做一個規范化的安裝程序,這是程序設計的最後一步,同時也是很重要的一步,因為運行安裝程序往往是用戶做的第一步操作。
很多報刊文章介紹了許多如何利用installshIEld等工具軟件來制作安裝程序的方法,這種辦法可以很快建立起較常見的安裝模式,但用這種辦法也有一些不足,如做成的安裝程序一般較大;風格較單一;不能靈活的控制啟動方式和快捷方式。其實安裝程序的的幾個運行步驟較固定,我們完全可以自己來編寫安裝程序。下面就詳細介紹如何用Delphi編寫具有自己軟件特色的安裝程序。
安裝程序要達到的幾個原則,如配置的一次性等,在有關雜志上已有許多文章介紹,就不再累述。這裡主要介紹安裝程序編寫中幾個主要過程:
1、將需要安裝的程序制作成資源文件
Step 1:編寫myres.rc資源腳本文件,可用記事本等編寫。
MYDBSRC mydbsrcfile c:resdemomynbdb.mdb
MYDBJET mydbjetfile c:resdemomdac_typ.exe
MYDBAPP mydbappfile c:resdemoTnbdemo.exe
7001 Icon c:resdemosetup.ico
Step 2:利用BRCC32編譯生成資源文件myres.res。
brcc32.exe myres.rc
2、編寫安裝程序代碼
Step 1: 在setup.dpr文件中加入{$R mymyres.RES} 語句,這樣在編譯文件時包含資源文件。
Step 2: 編寫安裝程序背景界面。
//界面色彩漸變效果是通過用漸變的畫刷刷繪依次相鄰的矩形塊實現的。
//也可以實現其它特殊效果的安裝界面。
var i,j:Integer;
Dct:TRect;
begin
form1.Windowstate:=wsMaximized;
j:=form1.width;
//獲得表單高度
for i:=0 to 255 do
//此處設置RGB()中一個顏色值
begin
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‘);
//填充顏色
end;
end;
Step 3:創建主程序工作目錄
//設置目錄環境及配置文件
if not DirectoryExists(EdtDir.Text) then
// if MessageBox(getfocus,‘該目錄不存在,是否創建該目錄?‘,‘詢問‘,1) = idOK then
try
ForceDirectorIEs(EdtDir.Text);
except
MessageBox(getFocus,‘創建目錄失敗!‘,‘信息‘,0);
Exit;
end
// else Exit;
// ModalResult := mrOK;
Step 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;
Step 5:從資源文件中還原有關文件。
變量:
var
res:tresourcestream;
resname,resnewname:string;
RegFile:TRegIniFile;
begin
//從資源文件中還原數據庫文件
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(‘SOFTWAREmynb‘,‘exepath‘,trim(resnewname));