最近要写一个升级程序,要求只能生成一个EXE,一旦运行此EXE(升级程序) ,就要将原先的旧EXE替换掉。为此我认为用资源文件比较合适。即:事先将新EXE打入升级程序中(先生成rc,再将rc编译成res文件,再在delphi工程中导入资源),从而命名新程序与升级程序合二为一,到运行的时间,将新程序从资源中读出,并复制到目标位置即可。具体做法如下:
1、生成一个rc文件,文件格式如下:
rwww exefile "test.exe" //rwww是资源名称
//exefile是资源类型
//text.exe是资源
资源类型列表:
Wave: 资源文件是声音文件;
RCDATA: 一般二进制文件;
AVI: AVI动画;
ICON: 图标文件;
BITMAP: 位图文件;
CURSOR: 光标文件;
exefile: exe文件
FILE: 一般文件
2、将delphi安装目录下bin中的brcc32.exe文件拷出,用brcc32.exe执行
生成的rc文件,在dos窗口下 运行:brcc32 test.rc 生成正式的
后缀为.res的次源文件
3、在delphi中加入编译指令{$R test.res}用以编译。但注意,以上的test.exe文件
一定要在当前路径下存在。
4、调用:
var
t : TResourceStream;
begin
try
t := TResourceStream.Create(HInstance,'rwww','exefile'); //其中HInstance为一个句柄常量;rwww为资源名;exefile为资源类型
t.SaveToFile('c:/2.exe'); //保存文件成2.exe
finally
t.free;
end;
end;