用Delphi編制可自動公升級程式

2021-05-21 19:18:26 字數 1836 閱讀 1794

以下是我們的例子,設我們已經有乙個應用程式this.exe,要對它公升級,用來公升級的程式為upgrade.exe.

1.this的工程檔案框架

program this;

uses

sysutils,

windows,

forms,

我們將它寫入**中,因為這在delphi的工程檔案中是沒有自動生成的.「…」部分是你建立的窗體部分

var

fn : string;

tsi : tstartupinfo;

tpi : tprocessinformation;

begin

「公升級程式」使用fileage來檢查原來應用程式的建立時間,如果檢測到的是舊版本,則提示公升級:

if fileage(『someserversomedirthis.exe『) 〉 fileage(paramstr(0)) then

begin

fn:= extractfilepath(paramstr(0))+『upgradethis.exe『;

fillchar(tsi, sizeof(tsi), 0);

tsi.cb := sizeof(tsi);

if createprocess (pchar(fn), nil, nil, nil, false,

detached_process, nil, nil, tsi, tpi)

then exit

但是,如果「公升級程式」由於某些原因沒有執行,我們此時應該告訴使用者,他能通過其他方法得到乙個更新的程式版本,這時我們依然退出主程式以便使用者公升級.如果必要的話,也可以繼續裝入並執行舊版本.

else

begin

messagebeep(0);

exit;

end;

end;

end.

如果自動公升級程式是乙個控制台程式,那麼一定要保證正確的控制台程式連線選項設定.

program upgradethis;

uses

forms,

sysutils,

windows;

var

fn : string;

tsi : tstartupinfo;

tpi : tprocessinformation;

begin

用copyfile來拷貝新版本的檔案,同fileage一樣,它不考慮標準命名格式的路徑和檔名.

if copyfile(『someserversomedirthis.exe『,

pchar(extractfilepath(paramstr(0))+『this.exe『),false) then

begin

一旦這些新版本的檔案被拷貝到系統中,它就應該能夠執行了,而且也沒有理由不執行.所以,這裡基本上不需要加入出錯檢測的**.

那麼,例子中使它執行並簡單處理錯誤的**如下:

fn := extractfilepath(paramstr(0))+『this.exe『;

fillchar(tsi, sizeof(tsi), 0);

tsi.cb := sizeof(tsi);

createprocess(pchar(fn), nil, nil, nil, false, detached—process, nil, nil, tsi, tpi);

end

else

end.

上面只是從檔案的更新角度說明了編制「公升級程式」的方法,但在很多情況中公升級乙個程式甚至要修改登錄檔或各種ini的檔案,這些在delphi中是比較容易實現的,有興趣的朋友可以參照一些資料來加入實現這些功能的**. 

用Delphi編制趣味動畫滑鼠

我們經常可以看到許多生動有趣的動畫滑鼠,其實利用delphi強大的功能,我們完全可以隨心所欲地製作有個人特色的滑鼠。我製作了乙個名為 face的動畫滑鼠,在常態時,它是一張圓圓的臉,臉上有一雙咕嚕嚕亂轉的大睛眼。當按下左 右 鍵時,臉的左 右 眼就眨一下。如果持續按住,則左 右 眼眨個不停。下面我以...

簡單delphi自校驗

很簡單的一種 類似getfilesize 原理是對比程式最後修改時間,因為如果你不動他的話,那個時間是不會變的 這裡用的是findfirstfile 查詢檔案,這個api會填充乙個win32 find data資料,裡面遍有lastwritetime,這個是filetime,轉成systemtinm...

delphi 程式自刪除函式 DeleteMe

delphi 程式自刪除函式 deleteme 德州行業網 procedure deleteme varbatchfile textfile batchfilename string processinfo tprocessinformation startupinfo tstartupinfo b...