全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1223
推到 Plurk!
推到 Facebook!

有关如何更新原来的exe程序!

缺席
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-16 14:20:47 IP:218.18.xxx.xxx 未訂閱
我写了一个程序,放在一个公用文件夹中。我打算就是当程序每次自动运行的时候就与先前的exe文件做比较,看否更新,我写了段代码如下,但不行!可能须要做一个批处理文件之类的,还请各位指教在下如何做 var str,str1:string; begin //程序更新**********************************************************// str:=trim(datetimetostr(filedatetodatetime(fileage('\\mail\public\main.exe')))); str1:=trim(datetimetostr(filedatetodatetime(fileage('c:\case\main.exe')))); if str <> str1 then begin if application.messagebox('程序已有更新,是否需更新您的生管系统?', '提示', MB_yesno mb_iconquestion)=idyes then begin copyfile(pchar('\\mail\public\main.exe'),pchar('c:\case\main.exe'),false); //movefileex(pchar('\\mail\public\main.exe'),pchar('c:\case\main.exe'),movefile_replace_existing); application.messagebox('程序更新完毕,请重新启动程序!', '系统提示', MB_OK mb_iconinformation); end else begin halt; end; end;
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-16 15:36:27 IP:61.155.xxx.xxx 未訂閱
unit Unit1;    interface    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; const my_wm_user=wm_user+$100; type   TForm1 = class(TForm)     procedure FormCreate(Sender: TObject);   private   procedure updatex(var msg:tmessage);message my_wm_user;   procedure updatefile( filename1,filename2:string);     { Private declarations }   public     { Public declarations }   end;    var   Form1: TForm1;    implementation    {$R *.dfm} procedure tform1.updatefile( filename1,filename2:string); var f:textfile; begin assignfile(f,ExtractFilePath(application.ExeName) '\upme.bat'); rewrite(f); writeln(f,'@echo off'); writeln(f,':loop'); writeln(f,'copy "' filename1 '" "' filename2 '"'); writeln(f,'if exist ' filename2 ' goto loop'); writeln(f,'del "' ExtractFilePath(application.ExeName) 'upme.bat"'); closefile(f); winexec(pchar(ExtractFilePath(application.ExeName) '\upme.bat'),SW_HIDE); if application.messagebox('程序更新完毕,请重新启动程序!', '系统提示', MB_OK mb_iconinformation)=idok then application.Terminate ; end ; procedure TForm1.updatex(var msg:tmessage); begin if msg.WParam =$AAA then begin copyfile(pchar('c:\update\file1.exe'),pchar('c:\file1.exe'),false); if application.messagebox('程序更新完毕,请重新启动程序!', '系统提示', MB_OK mb_iconinformation)=idok then application.Terminate ; end; end; procedure TForm1.FormCreate(Sender: TObject); var str,str1:string; begin //程序更新**********************************************************// str:=trim(datetimetostr(filedatetodatetime(fileage('c:\update\file1.exe')))); str1:=trim(datetimetostr(filedatetodatetime(fileage('c:\file1.exe')))); if str <> str1 then if application.messagebox('程序已有更新,是否需更新您的生管系统?', '提示', MB_yesno mb_iconquestion)=idyes then //方式一[最好],可以更新其它文件或自己哦 updatefile('c:\update\file1.exe','c:\file1.exe'); //方式二[也不错],可以更新其它文件哦 // postmessage(handle, my_wm_user,$AAA,0); end; end. 我又想到更好的方法,就是您说的bat文件新式哦 發表人 -
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-16 16:18:00 IP:218.18.xxx.xxx 未訂閱
上面那位兄台的好象不行吧,因为我的程序已经在运行了,你不能在运行的时候更新程序的啊!能不能写个批处理文件,当程序运行时执行它呢?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-16 21:57:31 IP:202.39.xxx.xxx 未訂閱
參考這篇: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31613 --- 歡迎光臨 KTop 研究院--<-<-<@
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-16 22:15:47 IP:61.62.xxx.xxx 未訂閱
通常要更新程序的寫法最好是寫個前導程序會比較容易些, 如主程序若為 main.exe 的話, 我會寫個 start.exe 當作開始的程序, 當 user 要執行程序時. 就執行 start.exe, 程序內容就是檢查 main.exe 是否需要更新, 然後再執行 main.exe 並結束 start.exe 即可, 這樣一來比較容易而且也很方便..
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-17 08:33:22 IP:61.155.xxx.xxx 未訂閱
jtp  兄: 上面的红色部分就是批处理哦,我昨天就post了,可能您没看到哦< >< >
系統時間:2024-10-03 20:50:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!