亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

用Delphi編寫安裝程序

2019-09-08 23:09:11
字體:
來源:轉載
供稿:網友
                                                                                                                                                       
                       
  當你完成一個應用軟件的開發后,那么你還需要為該軟件做一個規范化的安裝程序,這是程序設計的最后一步,同時也是很重要的一步,因為運行安裝程序往往是用戶做的第一步操作。

  很多報刊文章介紹了許多如何利用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.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(''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,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的調用。在安裝過程中的一些提示性界面及每一個步驟大家可以根據自己的需要而制作,這樣做出來的安裝程序精練,而且風格可以做的很特別。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品ⅴa在线观看h| 美女扒开尿口让男人操亚洲视频网站| 国产精品夫妻激情| 精品亚洲va在线va天堂资源站| 国产精品久久久久不卡| 欧美日韩第一视频| 国产一区二区在线免费| 日本午夜在线亚洲.国产| 91精品久久久久久久久久入口| 亚洲精品国产精品国自产观看浪潮| 精品国产91久久久| 日韩欧美高清在线视频| 91亚洲永久免费精品| 欧美色道久久88综合亚洲精品| 4438全国亚洲精品在线观看视频| 欧美香蕉大胸在线视频观看| 欧美性极品少妇精品网站| 国产精品一区二区三区久久| 成人福利在线视频| 国产精品你懂得| 欧美精品久久久久久久免费观看| 国产精品亚洲网站| 欧美精品一本久久男人的天堂| 亚洲日本欧美日韩高观看| 久久精品成人动漫| 国产精品久久久久久中文字| 久久亚洲精品中文字幕冲田杏梨| 亚洲男人天堂视频| 51精品国产黑色丝袜高跟鞋| 久久中文久久字幕| 欧美日本国产在线| 国a精品视频大全| 不卡av日日日| 琪琪第一精品导航| 欧美大胆在线视频| 久久免费精品日本久久中文字幕| 中文字幕综合一区| 蜜臀久久99精品久久久无需会员| 97国产精品视频人人做人人爱| 成人女保姆的销魂服务| 成人欧美一区二区三区在线湿哒哒| 国产精品久久97| 97在线免费视频| 国内精品视频在线| 欧美肥老太性生活视频| 国产精品pans私拍| 亚洲一区二区三区xxx视频| 日韩成人在线视频观看| 久久综合网hezyo| 97在线视频精品| 国产视频欧美视频| 91精品久久久久久久| 亚洲视频在线免费看| 亚洲韩国欧洲国产日产av| 欧美日韩aaaa| 精品成人国产在线观看男人呻吟| 69视频在线免费观看| 精品国产一区二区三区四区在线观看| 97在线视频免费播放| 日韩欧美在线中文字幕| 97精品久久久中文字幕免费| 欧美激情18p| 国产日韩在线视频| 成人激情电影一区二区| 综合av色偷偷网| 亚洲老头同性xxxxx| 国内免费久久久久久久久久久| 国产丝袜一区二区三区免费视频| 亚洲欧美精品在线| 久久综合久久美利坚合众国| 日韩在线精品一区| 日韩精品中文字幕有码专区| 国产精品人人做人人爽| 亚洲第五色综合网| 欧美日韩国产第一页| 91国产在线精品| 久久久久久国产精品三级玉女聊斋| 国产香蕉一区二区三区在线视频| 韩日精品中文字幕| 国产精品自拍视频| 欧美精品在线观看| 国产欧美精品xxxx另类| 欧美一区二区三区免费观看| 中文字幕亚洲欧美日韩高清| 久久久免费精品| 成人av在线亚洲| 国产精品成人一区二区三区吃奶| 国产欧美精品在线播放| 欧美日韩国产综合新一区| 在线中文字幕日韩| 黄色精品在线看| 97精品视频在线| 亚洲欧美制服中文字幕| 亚洲美女av在线| 国产精品第三页| 久久综合久中文字幕青草| 久久久久久久久电影| 国产精品免费久久久久久| 国产精自产拍久久久久久| 欧美高跟鞋交xxxxxhd| 亚洲自拍偷拍色图| 日韩久久精品成人| 亚洲bt天天射| 国产日韩在线免费| 日韩av免费在线| 一本大道久久加勒比香蕉| 欧美电影在线观看高清| 亚洲另类xxxx| 日韩电影大片中文字幕| 国产精品入口夜色视频大尺度| 色伦专区97中文字幕| 热久久免费视频精品| 日韩中文字幕在线精品| 亚洲免费电影在线观看| 国产精品久久一| 夜色77av精品影院| 日本三级久久久| 精品久久久一区| 色噜噜久久综合伊人一本| 国产精品久久久久久av福利软件| 精品视频在线播放免| 久久久精品一区二区| 国产91成人video| 欧美日韩亚洲一区二| 欧美专区福利在线| 亚洲精品99久久久久| 亚洲天堂av综合网| 亚洲国产日韩一区| www.亚洲人.com| 日韩电影在线观看免费| 亚洲女成人图区| 国产精品1区2区在线观看| 日韩av在线网址| 日韩av不卡在线| 黄网动漫久久久| 理论片在线不卡免费观看| 久久夜色精品国产欧美乱| 2019中文字幕在线免费观看| 成人97在线观看视频| 亚洲free性xxxx护士hd| 成人激情电影一区二区| 国内精品伊人久久| 日韩中文av在线| 亚洲人成在线免费观看| 中文字幕综合一区| 日韩电影中文字幕在线观看| 日本a级片电影一区二区| 欧美日韩一区二区三区在线免费观看| 欧美日韩人人澡狠狠躁视频| 亚洲色图50p| 欧美性xxxx极品高清hd直播| 久久99热精品| 色婷婷av一区二区三区在线观看| 日韩大片在线观看视频| 最近2019好看的中文字幕免费| 日韩高清免费观看| 亚洲国产高潮在线观看| 亚洲福利精品在线| 九九热精品视频国产| 亚洲国产精品va在线| 久久亚洲私人国产精品va| 欧美日韩综合视频网址| 久久久噜久噜久久综合| 色青青草原桃花久久综合|