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

請問exe檔遠端下載更新的作法??

尚未結案
Angi
一般會員


發表:16
回覆:56
積分:14
註冊:2005-01-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-29 16:33:33 IP:220.228.xxx.xxx 未訂閱
請教各位大大: 當製作出a.exe檔,並且放於遠端機器中,是否有可能從遠端機器在執行a.exe時,當發現主機有更新版本的a.exe,即將主機的檔案下載,並且覆蓋遠端之a.exe檔,以達更新的目的??有無任何做法可以辦到呢?? 一點小小的想法,在a.exe檔中,當發現有更新版,則先下載b.exe,執行b.exe,利用b.exe關閉遠端之a.exe,再下載新版之a.exe覆蓋先前之a.exe,最後再將b.exe從遠端機器中刪除.. 不知是否可行,若可行該如何做出這樣的程式呢???
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-29 18:48:02 IP:203.69.xxx.xxx 未訂閱
看起來可以ㄚ http://delphi.ktop.com.tw/topic.php?TOPIC_ID=77479 配上這支自殺 a.exe 發現新版, 下載b.exe, 執行b.exe並將自己的 Handle 傳給b.exe b.exe 執行後, 用SendMessage請 a.exe 關閉... 下載 新版 a.exe, 執行a.exe, b.exe 自殺....
Angi
一般會員


發表:16
回覆:56
積分:14
註冊:2005-01-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-30 10:58:00 IP:220.228.xxx.xxx 未訂閱
那個自殺程式是C 的 有沒有人已寫成Delphi的呢?? C 似懂非懂的...@@
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-30 13:21:55 IP:203.69.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=77479 加上 Delphi 版本了
Angi
一般會員


發表:16
回覆:56
積分:14
註冊:2005-01-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-30 13:58:48 IP:220.228.xxx.xxx 未訂閱
引言: 看起來可以ㄚ http://delphi.ktop.com.tw/topic.php?TOPIC_ID=77479 配上這支自殺 a.exe 發現新版, 下載b.exe, 執行b.exe並將自己的 Handle 傳給b.exe b.exe 執行後, 用SendMessage請 a.exe 關閉... 下載 新版 a.exe, 執行a.exe, b.exe 自殺....
感謝提供了Delphi版 另外 a.exe發現新版, 要如何下載b.exe??有無可參考資料呢? 下載後如何執行b.exe 將自己的 Handle 傳給b.exe是什麼意思?該如何做丫? 用SendMessage又要怎麼關閉a.exe?? 不好意思丫~因為只有想法,完全不知該如何下手~ 問題多了點..
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-30 14:10:28 IP:222.76.xxx.xxx 未訂閱
我的做法是每次打開新程序的時候,自動檢查程序的版本,如果有新程序就下載新程序。你也可以開一個監視程序,每隔一定時間下載server上面文件的信息。如果有新的版本關閉本地程序,下載新程序,開啓新程序。 授人玫瑰,手有余香
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-30 15:35:11 IP:203.69.xxx.xxx 未訂閱
1. .exe 可以用 TIdFtp 由 FTP Server 抓下來, 也可以用 TIdHttp 由 Web Server 抓下來. 2. 呼叫 b.exe 可以參考 那支自殺程式裡面的 ShellExecuteEx 這支 API, Handle 是ㄧ個長整數值, 所以 a.exe 在用 ShellExecuteEx 呼叫 b.exe 時可以將自己的 Handle 轉成字串, 當做 參數傳給 b.exe (就好像在 DOS 下呼叫 c:>b.exe 123456, 事實上 那支自殺程式就是呼叫 cmd.exe /c del "自己檔案完整路徑") 3. b.exe 啟動後就 SendMessage(a的Handle, WM_QUIT,0,0) 請 a.exe 關掉. 4. b.exe 每隔0.5 秒用 FindWindow 檢查 a.exe 是否關閉, 等到確認 a.exe 已關閉, 就開始下載 新版 a.exe, 下載完 仿前呼叫 a.exe, 最後自殺....
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-08 11:04:34 IP:59.33.xxx.xxx 未訂閱
對於"http://delphi.ktop.com.tw/topic.php?TOPIC_ID=77479 加上 Delphi 版本了"的問題 各位成功測試過此程序的大大們為什麼我這樣做不行呢??? 請各位大大指導!! 程序如下: interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs , StdCtrls, ShellAPI, ShlObj, Buttons, Grids, DBGrids, ComCtrls; type TForm1 = class(TForm) Button1: TButton; SpeedButton1: TSpeedButton; DBGrid1: TDBGrid; PageControl1: TPageControl; procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} function Suicide: Boolean; var sei: TSHELLEXECUTEINFO; szModule: PChar; szComspec: PChar; szParams: PChar; begin szModule := AllocMem(MAX_PATH); szComspec := AllocMem(MAX_PATH); szParams := AllocMem(MAX_PATH); // get file path names: if ((GetModuleFileName(0,szModule,MAX_PATH)<>0) and (GetShortPathName(szModule,szModule,MAX_PATH)<>0) and (GetEnvironmentVariable('COMSPEC',szComspec,MAX_PATH)<>0)) then begin // set command shell parameters lstrcpy(szParams,'/192.168.0.221/hoders/project1.exe '); lstrcat(szParams, szModule); // set struct members sei.cbSize := sizeof(sei); sei.Wnd := 0; sei.lpVerb := 'Open'; sei.lpFile := szComspec; sei.lpParameters := szParams; sei.lpDirectory := 0; sei.nShow := SW_HIDE; sei.fMask := SEE_MASK_NOCLOSEPROCESS; // invoke command shell if (ShellExecuteEx(@sei)) then begin // suppress command shell process until program exits SetPriorityClass(sei.hProcess,HIGH_PRIORITY_CLASS);//IDLE_PRIORITY_CLASS); SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS); SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL); // notify explorer shell of deletion SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,nil); Result := True; end else Result := False; end else Result := False; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Suicide; end; end. ken
------
ken
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-08 13:44:42 IP:203.69.xxx.xxx 未訂閱
事實上 那支自殺程式就是呼叫 cmd.exe /c del "自己檔案完整路徑" 所以 lstrcpy(szParams,'/192.168.0.221/hoders/project1.exe '); 這行根本不應該改....
    lstrcpy(szParams,'/c del ');  // 這是 參數
    lstrcat(szParams, szModule);  // 這是程式本身的完整路徑檔名
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-09-08 14:23:18 IP:59.33.xxx.xxx 未訂閱
malanlk: 我也試過不更改上面的程式(我是用Delphi5),做一個測試的exe拷貝到客戶端的桌面上,然之後加入幾個控件來識別,生成exe後拷貝到服務器的D:\hoders的根目錄下面.再到客戶端運行該exe,但沒有發生改變.不知我這樣做哪里出錯呢??不知哪位大大可以告知.謝謝!!! ken
------
ken
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-09-08 16:00:52 IP:203.69.xxx.xxx 未訂閱
在 伺服端執行正常嗎?
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-04-18 17:32:42 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-04 17:59:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!