学习(编程技巧_编程知识_程序代码),是学习编程不可多得的学习精验

源代码在线查看: 用delphi编写安装程序.txt

软件大小: 726 K
上传用户: csytml
关键词: 编程 编程技巧 程序 代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				用Delphi编写安装程序
				 
				
				--------------------------------------------------------------------------------
				 
				第八军团 时间:2003-12-28 14:08:14 
				   
				当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序,这是程序设计的最后一步,同时也是很重要的一步,因为运行安装程序往往是用户做的第一步操作。 
				  很多报刊文章介绍了许多如何利用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)); 
				
				   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,processinfo) 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 
				
				     //建立组群 
				
				     sgroupdesc:='宁波大学课件管理系统 '; 
				
				     sgroupname:='宁波大学课件管理系统 v1.0'; 
				
				     //组成宏指令 
				
				     smacro:='[creategroup('+sgroupdesc+','+sgroupname+')]'; 
				
				     strpcopy(szmacro,smacro);           //转成null-term 字串 
				
				     ddeclientconv1.ExecuteMacro(szmacro,false); //执行宏指令 
				
				     //建立ICON图像 
				
				     sprogicon:=trim(FrmPathSelect.EdtDir.Text)+'Tnbdemo.exe';; 
				
				     sprogdesc:='宁波大学课件管理系统'; 
				
				     smacro:='[additem('+sprogicon+','+sprogdesc+')]'; 
				
				     strpcopy(szmacro,smacro); 
				
				     ddeclientconv1.ExecuteMacro(szmacro,false); 
				
				     ddeclientconv1.CloseLink; 
				
				   end; 
				
				  Step 8:创建桌面快捷方式 
				
				  //uses shlobj,comobj,activex; 
				
				  var 
				
				  tmpObject:IUnknown; 
				
				  tmpSLink:IShellLink; 
				
				  tmpPfile:IPersistFile; 
				
				  PIDL:PItemIDList; 
				
				  StartupDirectory : array[0..MAX_PATH] of Char; 
				
				  StartupFilename : String; 
				
				  LinkFilename : WideString; 
				
				  c1:THandle; 
				
				  begin 
				
				  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'),0,'SHELLDLL_DefView',''),0,'SysListView32',''); 
				
				  PostMessage(c1,WM_KEYDOWN,VK_F5,0); 
				
				  PostMessage(c1,WM_KEYUP,VK_F5,1 shl 31); 
				
				  end; 
				
				  Step 9:重新启动机器 
				
				  begin 
				
				   ExitWindowsEx(2,0); 
				
				  end; 
				
				  以上是程序的主要语句部分,从本人的开发系统中剪出来,用到了一些WIN API的调用。在安装过程中的一些提示性界面及每一个步骤大家可以根据自己的需要而制作,这样做出来的安装程序精练,而且风格可以做的很特别。 
				 
							

相关资源