アプリケーションソフトウェアの開発を完了した後、これがプログラミングの最後のステップであり、インストーラーを実行することも多くの場合、重要なステップです。
多くの新聞記事では、この方法を作成するためにInstallShieldやその他のツールソフトウェアを使用して、一般的にこの方法を使用するにはいくつかの欠点がありますシングルスタイル。実際、インストーラーのいくつかのランニングステップは比較的固定されているため、インストーラーを自分で書くことができます。以下は、Delphiを使用して独自のソフトウェア特性を備えたインストールプログラムを作成する方法の詳細な紹介です。
1回限りの構成など、インストーラーが達成する必要があるいくつかの原則が関連する雑誌に導入されているため、詳細に説明しません。ここでは、主にインストーラーの執筆にいくつかの主要なプロセスを紹介します。
1.リソースファイルにインストールする必要があるプログラムを作成します
ステップ1:myres.rcリソーススクリプトファイルを書き込みます。
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、 '' Ningbo Universityコースウェア管理システムv1.0 '');
//色を埋めます
終わり;
終わり;
ステップ3:メインプログラムワーキングディレクトリを作成します
//ディレクトリ環境と構成ファイルを設定します
DirectoryExists(edtdir.text)ではない場合
// messagebox(getFocus、 ''このディレクトリは存在しません、それは作成されていませんか? ''、 ''、 'question' '、1)= idok
試す
forcedirectories(edtdir.text);
を除外する
messagebox(getFocus、 ''ディレクトリの作成が失敗! ''、 '' Information ''、0);
出口;
終わり
// else exit;
// 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
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に対応)
//データベースドライバーのインストール
var
cmdlinepchar:charの配列[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では
始める
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:charの配列[0..254]。
sgroupdesc、sgroupName:string;
sprogdesc:string;
Sprogicon:文字列;
//メインプログラムグループを作成します
//ダイアログチャネルを開きます
ddeclientconv1.openlinkの場合
始める
//グループを作成します
SGROUPDESC:= '' Ningbo Universityコースウェア管理システム '';
sgroupName:= '' Ningbo Universityコースウェア管理システムv1.0 '';
//マクロを作ります
smacro:= '' [creategroup( ''+sgroupdesc+''、 ''+sgroupName+'')] '';
strpcopy(szmacro、smacro);
ddeclientconv1.executemacro(szmacro、false);
//アイコン画像を作成します
sprogicon:= trim(frmpathselect.edtdir.text)+''/tnbdemo.exe '' ;;
Sprogdesc:= '' Ningbo Universityコースウェア管理システム '';
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:サンドル;
始める
StartupFileName:= '' '' tnbdemo.exe '' '' ';
tmpobject:= createcomobject(clsid_shelllink);
tmpslink:= tmpobject as ishelllink;
tmppfile:= tmpobject as 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 ''、 '' program manager '' ')、' 'shelldll_defview' '、' '' ')、0、' 'syslistview32') '、' '' '');
ポストメサージ(C1、wm_keydown、vk_f5,0);
ポストメサージ(C1、WM_KEYUP、VK_F5,1 SHL 31);
終わり;
ステップ9:マシンを再起動します
始める
ExitWindowSex(2,0);
終わり;
上記はプログラムの主な声明の一部であり、私の開発システムから切り取られ、WIN APIコールを使用しました。インストールプロセス中、インストールプログラムに応じて、迅速なインターフェイスを作成できます。