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

首頁 > 編程 > Delphi > 正文

Delphi 實現(xiàn)軟件自動升級的功能

2020-01-31 20:50:03
字體:
供稿:網(wǎng)友

Delphi 實現(xiàn)軟件自動升級的功能

原理簡單,在FTP上維護一個Update.ini文件,里面記錄著要更新文件的版本號,本地也有一個Update.ini文件,每次啟動更新程序時,先從FTP上下載Update.ini文件到本地名字為Update_new.ini,然后比較這兩個文件,如果新的版本號大于舊的,或者新的文件在就ini中沒有,這些就表示要更新的文件,然后逐一下載。

    本程序名字為AutoUpdate,你生成這個exe,然后和主程序一起打包,創(chuàng)建桌面快捷方式時,指向AutoUpdate,而不是主程序。

    在本地還有一個ini文件,比如叫ftp.ini吧,里面內(nèi)容是

[coninfo]
main=Project1.exe
param={app}sayyes.pj2 -y bde.txt

main=Project1.exe:是主程序名稱,和升級程序在同一目錄

param={app}sayyes.pj2 -y bde.txt:這是命令行參數(shù),app為當前路徑,在程序中替換掉,傳遞給主程序(如果需要的話)

update.ini的內(nèi)容格式如下

[root]

辦事處查詢.txt=20100519
[dbcard]
sayyes.pj2=20100519
FTP用戶密碼.txt=20100519

[root]代表根目錄,后面的[dbcard]代表子目錄,依次類推

unit Main;  interface  uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, IdHTTP, IdBaseComponent, IdComponent, IdTCPConnection,  IdTCPClient, IdFTP, ComCtrls, ExtCtrls,IniFiles,ShellAPI, jpeg;  type  TfrmMain = class(TForm)   IdFTP1: TIdFTP;   IdHTTP1: TIdHTTP;   ProgressBar1: TProgressBar;   GroupBox1: TGroupBox;   ld_host: TLabeledEdit;   ld_username: TLabeledEdit;   ld_psw: TLabeledEdit;   ld_port: TLabeledEdit;   Label1: TLabel;   cb_mode: TComboBox;   ProgressBar2: TProgressBar;   Label3: TLabel;   list_file: TListView;   Label4: TLabel;   procedure IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;    const AWorkCount: Integer);   procedure IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);   procedure FormCreate(Sender: TObject); private   { Private declarations }   FSize:Integer;   FPath: string;   FExePath: string;   FInitPath: string;   FIniFile:TIniFile;   FHandle:HWND;   FMainExe:string;   FParam: string;    procedure CheckUpdateList;   function ConnectFTP:Boolean;   procedure DownLoadFile;   procedure LoadIni;   procedure SaveIni;  public   { Public declarations }  end;  var  frmMain: TfrmMain;  implementation uses  Flash; {$R *.dfm} //下載進度 procedure TfrmMain.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;  const AWorkCount: Integer); begin  ProgressBar1.Position := AWorkCount;  Application.ProcessMessages; end;  procedure TfrmMain.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode); begin  ProgressBar1.Position := 0;  ProgressBar2.StepBy(1); end;  procedure TfrmMain.FormCreate(Sender: TObject); var  frm: TfrmFlash; begin  Self.Visible := False;  //閃屏,可以不加  frm := TfrmFlash.Create(nil);  frm.Show;  Application.ProcessMessages;  FExePath := ExtractFilePath(Application.ExeName);  FIniFile := TIniFile.Create(FExePath+'ftp.ini');  //加載ini信息,就是主機和端口之類的信息  LoadIni;  try   ConnectFTP;   CheckUpdateList;   Self.Visible := True;   Application.ProcessMessages;   DownLoadFile;  finally      FreeAndNil(frm);   IdFTP1.Quit;   FParam := StringReplace(FParam,'{app}',FExePath,[rfReplaceAll]); //更新完畢后,啟動主程序,并傳入命令行參數(shù)   ShellExecute(Handle,'open',PChar(FExePath+FMainExe),PChar(FParam),nil,SW_NORMAL);   Application.Terminate;  end; end;  //檢查更新列表 procedure TfrmMain.CheckUpdateList; var  oldFile,newFile:TStringList;  i,ver,index:Integer;  itemstr,itempath: string;  item:TListItem; begin  oldFile := TStringList.Create;  newFile := TStringList.Create;  try   list_file.Clear;   //先下載服務器上的update.ini文件,存到本地update_new.ini   IdFTP1.Get('update.ini',FExePath+'update_new.ini',True);   if FileExists(FExePath + 'update.ini') = False then Exit;   oldFile.LoadFromFile(FExePath + 'update.ini');   newFile.LoadFromFile(FExePath + 'update_new.ini');   itempath := '';   //下面開始比較兩個list,如果newFile的版本號大于oldFile的版本號或者oldFile中沒有的都表示要更新的   for i := 0 to newFile.Count - 1 do   begin    itemstr := newFile.Strings[i];    if itemstr = '' then Continue;    if itemstr[1] = '[' then    begin     itempath := Copy(itemstr,2,Length(itemstr)-2);     //如果是根目錄     if itempath = 'root' then      itempath := '/';     Continue;    end;    itemstr := newFile.Names[i];    index := oldFile.IndexOfName(itemstr);    if index = - 1 then    begin     item := list_file.Items.Add;     item.Caption := itemstr;     item.SubItems.Add(itempath)    end    else    begin     ver := StrToIntDef(newFile.Values[itemstr],0);     if ver > StrToIntDef(oldFile.Values[itemstr],0) then     begin      item := list_file.Items.Add;      item.Caption := itemstr;      item.SubItems.Add(itempath);     end;    end;   end;   if list_file.Items.Count = 0 then Application.Terminate;  finally   oldFile.Free;   newFile.Free;  end; end;  function TfrmMain.ConnectFTP: Boolean; begin  Result := False;  try  IdFTP1.Host := ld_host.Text;  IdFTP1.Port := StrToIntDef(ld_port.Text,21);  IdFTP1.Username := ld_username.Text;  IdFTP1.Password := ld_psw.Text;  IdFTP1.Connect;  IdFTP1.Passive := cb_mode.ItemIndex = 1;  FInitPath := IdFTP1.RetrieveCurrentDir;  Result := IdFTP1.Connected;  except   Result := False;  end; end;  //下載文件更新 procedure TfrmMain.DownLoadFile; var  i:Integer;  path:string;  s1,s2:String; begin  ProgressBar2.Max := list_file.Items.Count;  ProgressBar2.Position := 0;  FIniFile.EraseSection('error');  for i := 0 to list_file.Items.Count - 1 do  begin   Label4.Caption := '正在下載 '+list_file.Items[i].Caption;   Application.ProcessMessages;   IdFTP1.ChangeDir(FInitPath);   path := list_file.Items[i].SubItems.Strings[0];   if path <>'/' then   begin    IdFTP1.ChangeDir(path);    ForceDirectories(FExePath+path);    s1 := list_file.Items[i].Caption;    s2 := FExePath+path+'/'+list_file.Items[i].Caption;    IdFTP1.Get(s1,s2,True);   end   else   begin    s1 := list_file.Items[i].Caption;    s2 := FExePath+'/'+list_file.Items[i].Caption;    IdFTP1.Get(s1,s2,True);    //記錄失敗項    FIniFile.WriteString('error',list_file.Items[i].Caption,'成功');   end;   except    //記錄失敗項    FIniFile.WriteString('error',list_file.Items[i].Caption,'失敗');   end;  end;  Label4.Caption := '所有文件更新完畢!';  DeleteFile(FExePath+'update.ini');  CopyFile(PChar(FExePath+'update_new.ini'),PChar(FExePath+'update.ini'),False); end;  procedure TfrmMain.LoadIni; begin  ld_host.Text := FIniFile.ReadString('coninfo','host','******');  ld_username.Text := FIniFile.ReadString('coninfo','user','******');  ld_psw.Text := FIniFile.ReadString('coninfo','psw','******');  ld_port.Text := FIniFile.ReadString('coninfo','port','21');  cb_mode.ItemIndex := FIniFile.ReadInteger('coninfo','mode',1);  FMainExe := FIniFile.ReadString('coninfo','main','Main.exe');  FParam := FIniFile.ReadString('coninfo','param',''); end;  procedure TfrmMain.SaveIni; begin  FIniFile.WriteString('coninfo','host',ld_host.Text);  FIniFile.WriteString('coninfo','user',ld_username.Text);  FIniFile.WriteString('coninfo','psw',ld_psw.Text);  FIniFile.WriteString('coninfo','port',ld_port.Text);  FIniFile.WriteInteger('coninfo','mode',cb_mode.ItemIndex); end;  end. 

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

欧美尤物一区| 黑人玩弄人妻一区二区三区| 日韩精品免费在线视频观看| 亚洲一区三区在线观看| 日韩中出av| 日韩av大片| 亚洲国产精品一区二区三区| 俺去啦在线观看| 久久精品久久99| 超碰96在线| 蜜芽在线免费观看| 91桃色在线| 一本色道69色精品综合久久| 美女激情视频网站| 欧美另类女人| 久久福利视频网| 日本又骚又刺激的视频在线观看| 国产人妻人伦精品1国产丝袜| 黄色污污在线观看| 黄色一级片黄色| 国产无套内射久久久国产| 狠狠色丁香婷婷| 黑巨人与欧美精品一区| 青青视频在线观| 99视频超级精品| 免费在线性爱视频| 日韩五码在线| 国产成人精品最新| 日韩欧美亚洲成人| 日本五码在线| 欧美久久在线| 嫩草av久久伊人妇女超级a| 三级网站免费看| 久久mv成人精品亚洲动漫| 岛国av免费在线| 国产中文av在线| 国产精品国产三级国产普通话对白| 尤物视频..com| 久久九九热免费视频| 中文字幕免费看| 午夜影院免费版| 91成人在线免费观看| 西西裸体人体做爰大胆久久久| 超碰在线图片| wwwww亚洲| 香港成人在线视频| 中文字幕97| 国产日产欧美一区二区视频| 九九久久免费视频| 亚洲性受xxx喷奶水| 99蜜桃臀久久久欧美精品网站| 在线免费观看高清视频色| 蜜桃无码一区二区三区| 强乱中文字幕av一区乱码| 狠狠色噜噜狠狠色综合久| 91丝袜一区二区三区| 久久精品国产屋| 婷婷色在线播放| 美女网站色免费| 精品国产一区二区三区久久狼黑人| 国产激情一区二区三区| 免费vip影院| 蜜桃av乱码一区二区三区| 日韩毛片网站| 天天综合网久久| 最新四虎影在线在永久观看www| 国产精品久久久久久久久毛片| 国模无码国产精品视频| 国产激情视频一区二区三区欧美| 欧美jizzhd精品欧美巨大免费| 国产三级在线观看| www.黄色av| 日日摸夜夜添夜夜添亚洲女人| 国产亚洲女人久久久久毛片| 久久久国产成人| 日韩欧美亚洲国产一区| 日本一级片免费| 欧美另类极品videosbest视频| 久久久久精彩视频| 久久频这里精品99香蕉| 亚洲欧美激情国产综合久久久| 美女被爆操网站| 色噜噜国产精品视频一区二区| 欧美日韩国产中文精品字幕自在自线| 亚洲色图另类图片| 污视频网站免费看| 最近中文字幕一区二区三区| 欧美日韩色图| www.xxx国产| 国产精品视频一区国模私拍| ,一级淫片a看免费| 欧美日韩亚洲第一| 日韩伦理在线观看| 91国内精品白嫩初高生| 一区二区视频在线免费观看| 亚洲精品午夜av福利久久蜜桃| 五月天婷婷久久| 国产精品入口| 亚洲伦理在线观看| 日本在线视频免费| 91国在线高清视频| 国产在线观看网站| 四虎影院免费在线| 91美女高潮出水| 亚洲欧美日本视频在线观看| 美洲精品一卡2卡三卡4卡四卡| 日韩欧美在线一区二区| 18深夜视频在线观看| 色网在线免费观看| 美女福利视频在线| 久久免费福利| 日本黄区免费视频观看| 国产欧美一区二区精品性色超碰| 国产真实乱偷精品视频免| 国产国语**毛片高清视频| 亚洲国产91视频| 校园春色综合| 波多野结衣在线观看一区二区三区| 国产日韩精品推荐| 欧美一级视频一区二区| 在线小视频你懂的| 国产又黄又爽又无遮挡| 91在线看网站| 国内精品久久久久伊人av| 国语自产精品视频在线看抢先版图片| 一本一道久久a久久综合蜜桃| 日韩成人av电影在线| 久久精品亚洲国产奇米99| 国产精品久久久久不卡| 黄在线观看网站| 玖玖精品在线视频| 亚洲主播在线观看| 噜噜噜噜噜久久久久久91| 欧美成人精品一区二区| 综合区小说区图片区在线一区| 日韩精品丝袜美腿| 欧美日韩免费精品| 免费看国产精品一二区视频| 国产成人啪精品视频免费网| av二区在线| 97精品久久久中文字幕免费| 久久久91麻豆精品国产一区| 九色在线视频| 日批视频在线免费看| 一本到三区不卡视频| 初高中福利视频网站| 国产网红在线观看| 中文字幕无码人妻少妇免费| 国产经典欧美精品| 人人插人人射| 黄瓜视频污app| 午夜天堂在线视频| 亚洲欧洲激情在线乱码蜜桃| 嗯~啊~轻一点视频日本在线观看| 亚洲国产精品成人综合| 国产不卡精品视男人的天堂| 55av亚洲| 在线免费av片| 黄色精品视频在线观看| 国产私人尤物无码不卡| 久久精品男人的天堂| 国产精品视频xxx| 精品乱码一区二区三四区视频| 91caopron| 在线视频日韩欧美| 最近的2019中文字幕免费一页| 日韩欧美亚洲日产国产| 精品国产福利在线| 色一情一乱一伦一区二区三区丨| 成人av网站免费| 天使と恶魔の榨精在线播放| 波多野结衣久久精品| 欧美丝袜丝nylons| 海角社区69精品视频| 欧美黄污视频| 免费看黄色的网站| 中文字幕日韩在线播放| 精品盗摄女厕tp美女嘘嘘| 国产一区二区91| 夜夜嗨aⅴ免费视频| 高清日韩欧美| 欧美日韩在线视频一区二区| 国产精品久久激情| 久久手机在线视频| 国产精品老熟女视频一区二区| 91久久国产精品| jizzjizzjizz中国免费| 天堂精品视频| av大片在线| 久久这里有精品15一区二区三区| 天天摸天天舔天天操| 超碰在线播放91| 亚洲乱码国产乱码精品天美传媒| 激情久久av一区av二区av三区| 国产欧美日韩久久| 污视频在线观看网站| 亚洲午夜久久久久久久久久久| 欧美一区二区三区影视| 欧美日韩中文字幕在线观看| 人妻丰满熟妇av无码区hd| 97久久久免费福利网址| 国产精品久久久久久久牛牛| 成人欧美在线视频| 91社区在线观看播放| ga∨成人网| 亚洲xxxx18| 国内精品免费视频| 久久久久免费看| 中文亚洲视频在线| 亚洲欧美视频在线观看| 国产不卡精品视男人的天堂| 电影网一区二区| 超碰精品一区二区三区乱码| 欧美军同video69视频| 亚洲aa中文字幕| 欧美日韩国产高清一区| 性xxxx欧美老肥妇牲乱| 亚洲女性喷水在线观看一区| 999精品视频在这里| 免费成人美女在线观看.| 久久色精品视频| www国产成人| jizzjizz少妇亚洲水多| 精品久久久久久久久国产字幕| 久久精品99久久香蕉国产色戒| 久久综合给合| 极品白嫩丰满美女无套| 国产一区二区三区在线观看视频| 在线看片地址| 四虎4545www国产精品| 日韩在线免费| 日韩成人一区二区三区| 中文日韩欧美| 亚洲图片在线| 欧美大片日本大片免费观看| 国产性一级片| 国产精品一区二区果冻传媒| 无码国产69精品久久久久网站| 国产乱码精品一区二区| 蜜桃传媒一区二区亚洲av| 一区二区日韩欧美| 日本中文字幕高清| 亚洲黄页在线观看| 日韩大尺度在线观看| 精品人妻无码一区二区三区蜜桃一| 影音先锋在线一区| 色香阁99久久精品久久久| 国产福利久久久| 午夜久久久久久久| 免费黄色在线播放| 老牛精品亚洲成av人片| 热久久美女精品天天吊色| 国产精品久久久久高潮| 国产在线精品成人一区二区三区| 思思久久精品视频| 欧美激情综合五月色丁香小说| 国产精品黄色av| 狠狠狠综合7777久夜色撩人| 国产精品一区二区三区精品| 丁香花在线观看完整版电影| 周于希免费高清在线观看| 高潮白浆女日韩av免费看| 欧美羞羞视频| 国内精品区一区二区三| 女女色综合影院| 99在线观看视频网站| 久久精品色综合| 国产三级视频在线| 欧美日韩爱爱视频| 欧美国产日韩一区| 亚洲曰韩产成在线| 91色综合久久久久婷婷| 天天综合在线视频| 欧美一区二区三区免费| 99久久精品免费视频| aaaa黄色片| 91精品一区二区三区蜜桃| www.色亚洲| 999在线观看免费大全电视剧| 高清国产午夜精品久久久久久| 欧美色图亚洲图片| 欧美日韩成人综合在线一区二区| 黄色成人在线看| 欧美中文字幕一区二区三区亚洲| 久久精品亚洲人成影院| 欧美三级电影网| 中文在线视频观看| 日本成人免费在线观看| av一区二区三| 亚洲欧洲一区二区三区久久| 97人人爽人人爽人人爽| a视频在线免费看| 91麻豆产精品久久久久久夏晴子| 国产精品久久久久久久蜜臀| 麻豆精品在线播放| 欧美一级在线播放| 色婷婷av一区二区三区软件| 午夜av在线播放| 国产日产欧美一区二区三区| 九九热在线免费观看| 日韩偷拍自拍| 少妇丰满尤物大尺度写真| 成人丝袜视频网| 老太脱裤子让老头玩xxxxx| 周于希免费高清在线观看| 亚洲精品国产综合区久久久久久久| 国产视频亚洲色图| 日本三级电影免费观看| 国产成人精品视频一区| 欧美a极品极品欧美| 亚洲成av人片在线观看香蕉| se69色成人网wwwsex| xxxxhd欧美精品| 亚洲一区二区三区在线免费观看| 国产精品国产精品国产专区| 亚洲一区二区三区四区| 精品国产一区二区三区性色av| 久久久久久无码精品人妻一区二区| 亚洲精品久久久久久国产精华液| 免费一级欧美片在线观看| 欧美wwwxxxx| 国产福利一区二区三区| 精品麻豆剧传媒av国产九九九| 久久精品在这里| 蜜桃a∨噜噜一区二区三区| 怡红院一区二区| www.欧美亚洲| 亚洲视频1区|