線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2145
推到 Plurk!
推到 Facebook!

如何把同名程式檔但版本不同複製到正在執行中的程式檔?

答題得分者是:pcboy
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-03 15:57:36 IP:220.131.xxx.xxx 訂閱
1.如何把同名程式檔但版本不同複製到正在執行中的程式檔?
例如我的程式c:\temp\project1.exe 正在執行,.並從網路中知道有更新版本.但從網路下載project1.exe並要存在c:\temp之目錄,總是不行,即使下載project1.exe到其他目錄,接著用檔案總管的複製,貼上,仍不能將project1.exe複製到c:\temp\project1.exe ,當c:\temp\project1.exe 不在執行中就可以了為什麼呢?

2.問這問題是我要做線上更新程式, 也就是c:\temp\project1.exe 正在執行時會從網路得知有無較新版本,若有就即使下載到程式所在目錄?
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-03 17:01:58 IP:61.220.xxx.xxx 訂閱
用另外一隻程式 agent.exe 作更新和執行project1.exe
agent.exe 執行後, 去下載新版 project1.exe , 然後執行 project1.exe

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-03 17:36:40 IP:218.18.xxx.xxx 未訂閱
Project1.exe正在運行中,當然無法替換了。
如果你要用Project1.exe程式執行版本檢查與更新,你可以先把新的Project1.exe下載到另一個臨時文件夾中,或另存一個文件名(如Project1.tmp),再生成一個批處理文件(.bat),這個BAT文件執行把下載的新文件替換Project1.exe文件操作,在Project1.exe退出時執行這個批處理文件:
//....
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
//在 這裡Call批處理文件執行
//...

當然也可以在計算機重啓時執行文件替換操作。

另一種比較方便的方法是,另寫一個程式來執行版本更新操作,而不要由Project1.exe來執行。
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-09-04 08:10:19 IP:61.220.xxx.xxx 訂閱
這種做法可能未必行得通
在Project1.exe執行BAT時候, BAT沒有執行完前, Project.exe是否能結束?
1.如果不能, BAT作Project1.exe仍會失敗
2.如果能, 要考慮時間差, BAT未必是剛好在Project1.exe執行完後執行, Project1.tmp拷貝為Project1.exe仍可能會失敗, 這種做法是賭運氣


===================引 用 h@visli 文 章===================
Project1.exe正在運行中,當然無法替換了。
如果你要用Project1.exe程式執行版本檢查與更新,你可以先把新的Project1.exe下載到另一個臨時文件夾中,或另存一個文件名(如Project1.tmp),再生成一個批處理文件(.bat),這個BAT文件執行把下載的新文件替換Project1.exe文件操作,在Project1.exe退出時執行這個批處理文件:
//....
? Application.Initialize;
? Application.CreateForm(TForm1, Form1);
? Application.Run;
? //在 這裡Call批處理文件執行
//...

當然也可以在計算機重啓時執行文件替換操作。

另一種比較方便的方法是,另寫一個程式來執行版本更新操作,而不要由Project1.exe來執行。
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
yish35
一般會員


發表:5
回覆:29
積分:6
註冊:2007-01-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-09-26 12:13:30 IP:210.192.xxx.xxx 訂閱
請教大大
A1.exe 內有變數 vers:='1'
A2.exe 內有變數 vers:='2'
我寫了一個trans去做比對 A1.VERS和A2.VERS
可是,我要如何在TRANS內,把A.VERS值取出
或大大要更好的版本識別法。
------
環境 DELPHI 7
Delphi 新手,請多指教
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-09-26 14:27:10 IP:61.220.xxx.xxx 訂閱
使用檔案 A1.ver 和 A2.ver 存放檔案版本
or
用檔案[摘要]
(在任意檔案上按下滑鼠右鍵, 選[內容], 按下[摘要]標籤)
前者在任何作業系統都可使用, 後者可能不保證, 您要自己測試
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
yish35
一般會員


發表:5
回覆:29
積分:6
註冊:2007-01-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-09-27 09:58:43 IP:210.192.xxx.xxx 訂閱
大大:
我想用的就是a1.ver的方式
當我去執行 trans.exe 時,我需要他從a1.exe中,取出a1.ver的值
抱歉試很久,及找了很多文章都找不到,請問您,我在trans 要如何做
===================引 用 pcboy 文 章===================
使用檔案 A1.ver 和 A2.ver 存放檔案版本
or
用檔案[摘要]
(在任意檔案上按下滑鼠右鍵, 選[內容], 按下[摘要]標籤)
前者在任何作業系統都可使用, 後者可能不保證, 您要自己測試
------
環境 DELPHI 7
Delphi 新手,請多指教
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-09-27 10:02:31 IP:210.241.xxx.xxx 訂閱
A1.ver 和 A2.ver 是兩個獨立的檔案, 不是從 exe 中取出來的

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
yish35
一般會員


發表:5
回覆:29
積分:6
註冊:2007-01-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-09-27 11:41:15 IP:210.192.xxx.xxx 訂閱
雖然和我想要差很多,不過不失一個好方法,
感謝大大
------
環境 DELPHI 7
Delphi 新手,請多指教
yish35
一般會員


發表:5
回覆:29
積分:6
註冊:2007-01-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-10-26 16:22:23 IP:210.192.xxx.xxx 訂閱
[code copy]
CopyFile(PChar('h:\shopfloor\sf1.exe'), PChar('d:\sf\sf1.exe'), False);
//呼叫 D:\sf\sf1.exe來執行
ShellExecute(Application.Handle,'open' ,PChar('d:\sf\sf1.exe'),nil,nil,SW_SHOW);
close();
[/code]

請教大大,如果我採用這種方式,會不會有您提到問題
未copy 完,就去執行
PS:我的sf1.exe檔案很小,所以感覺不到
===================引 用 pcboy 文 章===================
這種做法可能未必行得通
在Project1.exe執行BAT時候, BAT沒有執行完前, Project.exe是否能結束?
1.如果不能, BAT作Project1.exe仍會失敗
2.如果能, 要考慮時間差, BAT未必是剛好在Project1.exe執行完後執行, Project1.tmp拷貝為Project1.exe仍可能會失敗, 這種做法是賭運氣


===================引 用 h@visli 文 章===================
Project1.exe正在運行中,當然無法替換了。
如果你要用Project1.exe程式執行版本檢查與更新,你可以先把新的Project1.exe下載到另一個臨時文件夾中,或另存一個文件名(如Project1.tmp),再生成一個批處理文件(.bat),這個BAT文件執行把下載的新文件替換Project1.exe文件操作,在Project1.exe退出時執行這個批處理文件:
//....
? Application.Initialize;
? Application.CreateForm(TForm1, Form1);
? Application.Run;
? //在 這裡Call批處理文件執行
//...

當然也可以在計算機重啓時執行文件替換操作。

另一種比較方便的方法是,另寫一個程式來執行版本更新操作,而不要由Project1.exe來執行。
------
環境 DELPHI 7
Delphi 新手,請多指教
系統時間:2024-05-04 8:13:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!