人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細頁面

用Delphi編制可自動升級程序

用Delphi編制可自動升級程序

更新時間:2022-08-27 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

楊 超

在編制了一個應(yīng)用程序后的維護階段,我們會面臨給應(yīng)用程序升級的工作.無疑,手工升級的工作是十分繁瑣的,你可能會需要到用戶的機器上去更新文件.可是,如果能編一個自動升級程序,放在網(wǎng)絡(luò)上,讓用戶下載,只需執(zhí)行一下就完成升級工作,不是很方便嗎?其實,用Delphi可以很方便地編制出這樣一個的程序.

以下是我們的例子,設(shè)我們已經(jīng)有一個應(yīng)用程序This.exe,要對它升級,用來升級的程序為Upgrade.exe.

1.This的工程文件框架

program THIS;

uses

SysUtils,

Windows,

Forms,

...;

我們將它寫入代碼中,因為這在Delphi的工程文件中是沒有自動生成的.“…”部分是你創(chuàng)建的窗體部分

Var

Fn : String;

TSI : TStartupInfo;

TPI : TProcessInformation;

{$R *.RES}

begin

“升級程序”使用FileAge來檢查原來應(yīng)用程序的建立時間,如果檢測到的是舊版本,則提示升級:

IF FileAge(‘SomeServerSomeDirthis.exe‘) 〉 FileAge(ParamStr(0)) THEN

IF Application.MessageBox(‘這是一個更新版本的THIS.EXE.‘+#13‘你要得到新版本的升級文件嗎?‘, ‘Upgrade Time!‘,1) = 1 THEN

Begin

運行升級程序時,升級程序應(yīng)與原主程序this.exe在同一目錄下.如果當(dāng)它啟動時,這個版本主程序應(yīng)該退出,但要保證它不會刪除任何文件,因為此時Application.Initialize還沒有被調(diào)用.代碼如下:

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

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

ELSE

Begin

messagebeep(0);

Application.MessageBox(‘不能完成文件拷貝.‘+‘ ‘ 請手工拷貝!.‘, ‘Copy Error!‘,1);

Exit;

End;

End;

Application.Initialize;

Application.Title := ‘This‘;

Application.HelpFile := ‘This.hlp‘;

{autocreate forms, etc.}

Application.Run;

end.

如果自動升級程序是一個控制臺程序,那么一定要保證正確的控制臺程序連接選項設(shè)置.

program UpgradeThis;

uses

Forms,

SysUtils,

Windows;

Var

Fn : String;

TSI : TStartupInfo;

TPI : TProcessInformation;

{$R *.RES}

begin

用CopyFile來拷貝新版本的文件,同F(xiàn)ileAge一樣,它不考慮標(biāo)準(zhǔn)命名格式的路徑和文件名.

IF CopyFile(‘SomeServerSomeDirthis.exe‘,

PChar(ExtractFilePath(ParamStr(0))+‘this.exe‘),False) THEN

Begin

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

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

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

Application.MessageBox(‘不能拷貝文件THIS.EXE‘, ‘Error!‘, mb_OK);

end.

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

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

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 澄迈县| 绥宁县| 沾益县| 临沭县| 敖汉旗| 仪征市| 乐都县| 托克逊县| 阆中市| 海盐县| 万州区| 蓬安县| 南充市| 浦东新区| 都昌县| 宁乡县| 宁夏| 镇原县| 尉犁县| 南宫市| 东源县| 囊谦县| 海口市| 阆中市| 古丈县| 石楼县| 建湖县| 历史| 卢龙县| 绥中县| 舞钢市| 沭阳县| 社旗县| 云梦县| 那曲县| 彭泽县| 康定县| 江安县| 云龙县| 东乡| 于都县|