发信人: wpf (I'llTouchTheBlueSky), 信区: BorlandDev
标  题: 使用Delphi编写安装程序  (转载)
发信站: 哈工大紫丁香 (2001年09月05日20:06:51 星期三), 转信

【 以下文字转载自 Programming 讨论区 】
【 原文由 kaola 所发表 】

使用Delphi编写安装程序   作者:吴立军     发布时间:2001/08/17
文章摘要:
  当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序
,这是程序设计的最后一步,同时也是很重要的一步,因为运行安装程序往往是用户做
的第一步操作。
----------------------------------------------------------------------------
----
正文:
使用Delphi编写安装程序  
  
  当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序
,这是程序设计的最后一步,同时也是很重要的一步,因为运行安装程序往往是用户做
的第一步操作。
  很多报刊文章介绍了许多如何利用installshield等工具软件来制作安装程序的方法
,这种办法可以很快建立起较常见的安装模式,但用这种办法也有一些不足,如做成的
安装程序一般较大;风格较单一;不能灵活的控制启动方式和快捷方式。其实安装程序
的的几个运行步骤较固定,我们完全可以自己来编写安装程序。下面就详细介绍如何用
DELPHI编写具有自己软件特色的安装程序。
  安装程序要达到的几个原则,如配置的一次性等,在有关杂志上已有许多文章介绍
,就不再累述。这里主要介绍安装程序编写中几个主要过程:
1、将需要安装的程序制作成资源文件
  Step 1:编写myres.rc资源脚本文件,可用记事本等编写。
  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
  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.Te
xt)+'\mynbdb.mdb';
  setupinfo.WriteString('access','backdbpath',trim(FrmPathSelect.EdtDir.Te
xt)+'\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('SOFTWARE\mynb','exepath',trim(resnewname));
   RegFile.Free;
  end
  Step 6:安装数据库驱动(与SETP 4对应)
  //安装数据库驱动程序
  var
  cmdlinepchar:array[0..120] of char;
  startupinfo:tstartupinfo;
  processinfo:tprocessinformation;
  begin
   screen.cursor:=crhourglass;
   strpcopy(cmdlinepchar,trim(FrmPathSelect.EdtDir.Text)+'\mdac_typ.exe /q
');
   fillchar(startupinfo,sizeof(startupinfo),#0); //置0
   with startupinfo do
   begin
   cb:=sizeof(startupinfo);
   dwflags:=startf_useshowwindow or startf_usestdhandles;
   wshowwindow:=sw_hide; //隐藏被调用程序窗口
   end;
   if createprocess(nil,cmdlinepchar,nil,nil,true,0,nil,nil,startupinfo,pr
ocessinfo) then
   //创建进程
   begin
   waitforsingleobject(processinfo.HProcess,infinite); //等待进程结束
  end
   else
   begin
     exit;
   end;
   screen.cursor:=crDEFAULT;
  DeleteFile(PChar(trim(FrmPathSelect.EdtDir.Text)+'\mdac_typ.exe'));
  end;
  Step 7:创建程序组
  变量:
  var
  smacro:string;
   szmacro:array[0..254] of char;
   sgroupdesc,sgroupname:string;
   sprogdesc:string;
   sprogicon:string;
  //创建主程序组
    //打开对话通路
   if ddeclientconv1.OpenLink then
   begin
     //建立组群
作者会员名:wshyp0
  
--
               我怕水,我怕谁?

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.247.126]
--
※ 转载:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: 202.118.245.178]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.544毫秒