其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

用Delphi编制可自动升级程序


发布日期:2021年11月24日
 
用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中是比较容易实现的有兴趣的朋友可以参照一些资料来加入实现这些功能的代码

上一篇:全面剖析Delphi 2006新增特性1

下一篇:delphi函数参考手册