請問exe檔遠端下載更新的作法?? |
尚未結案
|
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
Angi
一般會員 發表:16 回覆:56 積分:14 註冊:2005-01-12 發送簡訊給我 |
引言: 看起來可以ㄚ 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 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
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 發送簡訊給我 |
對於"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 發送簡訊給我 |
|
linken
一般會員 發表:23 回覆:37 積分:22 註冊:2004-11-24 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |