VPatch 在 INNO 中的应用。
VPatch 属于专为 NSIS 开发的补丁插件,通过本人开发的调用插件 callvpatch.dll 进行调用。在 INNO 中得到很好的应用。(注意:你可以在 VPatch 的官方网站“
http://www.tibed.net/vpatch/
”得到源代码,从而编译成一个适合在 INNO 中直接利用的 DLL,这里我为了通用性跟方便性,使用了 NSIS 通用调用插件,方便以后随时在 NSIS 的安装包中得到 VPatch 的已编译的 DLL)
以下是在本例子中的练习步骤,通过这个练习,你将会领略到 VPatch 在补丁安装程序方面的巨大作用。
测试包中的文件分布
VPatch(DIR)
| |-- EnglishAppSetup(DIR)
| | |---- Example1.iss --英文版软件安装脚本
| | |---- MyProg.exe --英文版软件主程序
| | |---- MyProg.hlp --英文版软件帮助
| | |---- Readme.txt --英文版软件自读文件
| | |---- English.isl --英文版软件安装程序英文界面语言文件
| |
| |
| |-- ChineseApp(DIR)
| | |---- MyProg.exe --汉化版软件中文主程序
| | |---- MyProg.hlp --汉化版软件中文帮助
| | |---- Readme.txt --汉化版软件中文自读文件
| |
| |
| |-- PatchSetup(DIR)
| |---- callvpatch.dll --我编写的调用 vpatch.dll 的中间插件
| |---- Patch.iss --补丁安装程序脚本
| |---- VPatch.dll --NSIS 补丁插件
|
|
|---- GenPat.exe --补丁文件生成工具
|---- Readme.txt --你正在看的本文件
|---- VPatch.html --VPatch 概述 1. 目录下的 EnglishAppSetup 里面是一个英文版例子的安装程序,你需要自己编译成安装程序进行安装。
2. 接着我们安装第一步产生的英文版安装程序,……,好了,现在我们已经安装了一个英文版程序在你的电脑中了。
3. 目录下的 ChineseApp 里面是汉化好的文件,这里的汉化版软件不会直接打包进安装程序的,这只是用来生成补丁文件时用的。
4. 好,现在看看补丁的生成。VPatch 有一个生成补丁的程序,GenPat.exe (可在 NSIS\Bin 目录下找到)
关于 GenPat.exe 的详细使用方法请看 VPatch.html 文档。
命令行生成补丁:
进入 VPatch 目录,输入如下命令:
注意:以上全部命令连续执行,GenPat 会自动把所有这些文件的补丁合成在 MyPatch.dat 中。
5. 如无意外 MyPatch.dat 会在 PatchSetup 目录中产生,补丁生成后,进行下一步的补丁程序安装制作了。
6. 脚本如下,功能包含了自动检测以前的安装路径,自动备份原文件。
INNO 脚本附件:
http://restools.hanzify.org/inno/vpatch/Inno_VPatch.zip
VPatch 属于专为 NSIS 开发的补丁插件,通过本人开发的调用插件 callvpatch.dll 进行调用。在 INNO 中得到很好的应用。(注意:你可以在 VPatch 的官方网站“
http://www.tibed.net/vpatch/
”得到源代码,从而编译成一个适合在 INNO 中直接利用的 DLL,这里我为了通用性跟方便性,使用了 NSIS 通用调用插件,方便以后随时在 NSIS 的安装包中得到 VPatch 的已编译的 DLL)
以下是在本例子中的练习步骤,通过这个练习,你将会领略到 VPatch 在补丁安装程序方面的巨大作用。
测试包中的文件分布
| |-- EnglishAppSetup(DIR)
| | |---- Example1.iss --英文版软件安装脚本
| | |---- MyProg.exe --英文版软件主程序
| | |---- MyProg.hlp --英文版软件帮助
| | |---- Readme.txt --英文版软件自读文件
| | |---- English.isl --英文版软件安装程序英文界面语言文件
| |
| |
| |-- ChineseApp(DIR)
| | |---- MyProg.exe --汉化版软件中文主程序
| | |---- MyProg.hlp --汉化版软件中文帮助
| | |---- Readme.txt --汉化版软件中文自读文件
| |
| |
| |-- PatchSetup(DIR)
| |---- callvpatch.dll --我编写的调用 vpatch.dll 的中间插件
| |---- Patch.iss --补丁安装程序脚本
| |---- VPatch.dll --NSIS 补丁插件
|
|
|---- GenPat.exe --补丁文件生成工具
|---- Readme.txt --你正在看的本文件
|---- VPatch.html --VPatch 概述
2. 接着我们安装第一步产生的英文版安装程序,……,好了,现在我们已经安装了一个英文版程序在你的电脑中了。
3. 目录下的 ChineseApp 里面是汉化好的文件,这里的汉化版软件不会直接打包进安装程序的,这只是用来生成补丁文件时用的。
4. 好,现在看看补丁的生成。VPatch 有一个生成补丁的程序,GenPat.exe (可在 NSIS\Bin 目录下找到)
关于 GenPat.exe 的详细使用方法请看 VPatch.html 文档。
命令行生成补丁:
进入 VPatch 目录,输入如下命令:
| 引用 UnkownUnkown 发表于 [/color] 的内容: |
[color=green] GenPat "EnglishAppSetup\MyProg.exe" "ChineseApp\MyProg_cn.exe" "PatchSetup\MyPatch.dat" GenPat "EnglishAppSetup\MyProg.hlp" "ChineseApp\MyProg_cn.hlp" "PatchSetup\MyPatch.dat" GenPat "EnglishAppSetup\Readme.txt" "ChineseApp\Readme_cn.txt" "PatchSetup\MyPatch.dat" |
5. 如无意外 MyPatch.dat 会在 PatchSetup 目录中产生,补丁生成后,进行下一步的补丁程序安装制作了。
6. 脚本如下,功能包含了自动检测以前的安装路径,自动备份原文件。
| 引用 Patch.iss 发表于 [/color] 的内容: |
[color=#000000]; -- Example1.iss -- ; 补丁安装程序制作脚本 [Setup] AppName =Test Program AppVerName =Test Program version 1.5 UsePreviousAppDir =yes DefaultDirName = {pf} \My Program Uninstallable =false Compression =lzma SolidCompression =yes OutputDir =. [Files] Source : "callvpatch.dll"; Flags : dontcopy Source : "VPatch.dll"; Flags : dontcopy Source : "MyPatch.dat"; Flags : dontcopy [code] const BackupDir = 'PatchBackup'; PatchFile = 'MyPatch.dat'; function vpatch(parentwnd: Integer; pluginname,funcname,param1,param2,param3: PChar): Integer; external 'vpatch@files:callvpatch.dll stdcall'; function PatchFileFunc(FileName: String ): Integer; begin Result := vpatch(0,ExpandConstant('{tmp}\VPatch.dll'),'vpatchfile',ExpandConstant('{tmp}\'+PatchFile), ExpandConstant('{app}\'+BackupDir+'\'+FileName),ExpandConstant('{app}\'+FileName)); // Result : // 0 = 成功 // 1 = 失败 end ; procedure BackupFile(FileName: String ); begin FileCopy(ExpandConstant('{app}\'+Filename),ExpandConstant('{app}\'+BackupDir+'\'+Filename),True); end ; procedure RestoreFile(FileName: String ); begin FileCopy(ExpandConstant('{app}\'+BackupDir+'\'+Filename),ExpandConstant('{app}\'+Filename),False); deleteFile(ExpandConstant('{app}\'+BackupDir+'\'+Filename)); end ; procedure InitializeWizard(); begin ExtractTemporaryFile('VPatch.dll'); ExtractTemporaryFile('MyPatch.dat'); end ; function NextButtonClick(CurPageID: Integer): Boolean; begin if CurPageID = wpselectDir then Result := FileExists(ExpandConstant('{app}\MyProg.exe')) else Result := True; if not Result then MsgBox('你选择的目录没有需要补丁的程序,请选择正确的目录!', mbInformation, MB_OK); end ; procedure CurPageChanged(CurPageID: Integer); begin if CurPageID = wpInstalling then begin createDir(ExpandConstant('{app}\'+BackupDir)); BackupFile('MyProg.exe'); if PatchFileFunc('MyProg.exe') = 1 then RestoreFile('MyProg.exe') WizardForm.PROGRESSGAUGE.POSITION := 33; BackupFile('MyProg.hlp'); if PatchFileFunc('MyProg.hlp') = 1 then RestoreFile('MyProg.hlp') WizardForm.PROGRESSGAUGE.POSITION := 66; BackupFile('Readme.txt'); if PatchFileFunc('Readme.txt') = 1 then RestoreFile('Readme.txt') WizardForm.PROGRESSGAUGE.POSITION := 100; end ; end ; |
INNO 脚本附件:
http://restools.hanzify.org/inno/vpatch/Inno_VPatch.zip
NSIS安装制作基础教程
Apache2.0.58+Php5.1.4+Mysql4.0.25+Zend Optimizerv2.6.0集成安裝包

2006/05/19 15:44 | by 



