熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

用Delphi編制可自動升級程序

2013-11-23 17:35:32  來源: Delphi編程 
 在編制了一個應用程序後的維護階段我們會面臨給應用程序升級的工作無疑手工升級的工作是十分繁瑣的你可能會需要到用戶的機器上去更新文件可是如果能編一個自動升級程序放在網絡上讓用戶下載只需執行一下就完成升級工作不是很方便嗎?其實用Delphi可以很方便地編制出這樣一個程序

  以下是我們的例子設我們已經有一個應用程序Thisexe要對它升級用來升級的程序為Upgradeexe

  This的工程文件框架

program THIS;

uses

SysUtils

Windows

Forms

;

  我們將它寫入代碼中因為這在Delphi的工程文件中是沒有自動生成的部分是你創建的窗體部分.

Var

Fn : String;

TSI : TStartupInfo;

TPI : TProcessInformation;

{$R *RES}

begin

  升級程序使用FileAge來檢查原來應用程序的建立時間如果檢測到的是舊版本則提示升級:

IF FileAge(SomeServerSomeDirthisexe) 〉 FileAge(ParamStr()) THEN

IF ApplicationMessageBox(這是一個更新版本的THISEXE+#你要得到新版本的升級文件嗎? Upgrade Time!) = THEN

Begin

  運行升級程序時升級程序應與原主程序thisexe在同一目錄下如果當它啟動時這個版本主程序應該退出但要保證它不會刪除任何文件因為此時ApplicationInitialize還沒有被調用代碼如下:

Fn:= ExtractFilePath(ParamStr())+UpgradeThisexe;

FillChar(TSI SizeOf(TSI) );

TSICB := SizeOf(TSI);

IF CreateProcess (PChar(Fn) NIL NIL NIL False

DETACHED_PROCESS NIL NIL TSI TPI)

THEN Exit

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

ELSE

Begin

messagebeep();

ApplicationMessageBox(不能完成文件拷貝+ 請手工拷貝! Copy Error!);

Exit;

End;

End;

ApplicationInitialize;

ApplicationTitle := This;

ApplicationHelpFile := Thishlp;

{autocreate forms etc}

ApplicationRun;

end

  如果自動升級程序是一個控制台程序那麼一定要保證正確的控制台程序連接選項設置

program UpgradeThis;

uses

Forms

SysUtils

Windows;

Var

Fn : String;

TSI : TStartupInfo;

TPI : TProcessInformation;

{$R *RES}

begin

  用CopyFile來拷貝新版本的文件同FileAge一樣它不考慮標准命名格式的路徑和文件名

IF CopyFile(SomeServerSomeDirthisexe

PChar(ExtractFilePath(ParamStr())+thisexe)False) THEN

Begin

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

  那麼例子中使它運行並簡單處理錯誤的代碼如下:

Fn := ExtractFilePath(ParamStr())+thisexe;

FillChar(TSI SizeOf(TSI) );

TSICB := SizeOf(TSI);

CreateProcess(PChar(Fn) NIL NIL NIL False DETACHED—PROCESS NIL NIL TSI TPI);

End

ELSE

ApplicationMessageBox(不能拷貝文件THISEXE Error! mb_OK);

end

  需要注意的是在這些用來升級程序的代碼中並沒有用到任何ApplicationInitialize和ApplicationRun這些方法同樣可以被引用來作檢查新版本的幫助文件(用GetWindowsDir或GetWindowsDirectory並把Help加入到用來升級的程序中)或用來檢測升級程序是否是新的版本

  上面只是從文件的更新角度說明了編制升級程序的方法但在很多情況中升級一個程序甚至要修改注冊表或各種INI的文件這些在Delphi中是比較容易實現的有興趣的朋友可以參照一些資料來加入實現這些功能的代碼


From:http://tw.wingwit.com/Article/program/Delphi/201311/24732.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.