INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页
INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页
作者:xin 日期:2005-09-23
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 概述
1. 目录下的 EnglishAppSetup 里面是一个英文版例子的安装程序,你需要自己编译成安装程序进行安装。
2. 接着我们安装第一步产生的英文版安装程序,……,好了,现在我们已经安装了一个英文版程序在你的电脑中了。
3. 目录下的 ChineseApp 里面是汉化好的文件,这里的汉化版软件不会直接打包进安装程序的,这只是用来生成补丁文件时用的。
4. 好,现在看看补丁的生成。VPatch 有一个生成补丁的程序,GenPat.exe (可在 NSIS\Bin 目录下找到)
关于 GenPat.exe 的详细使用方法请看 VPatch.html 文档。
命令行生成补丁:
进入 VPatch 目录,输入如下命令:

GenPat "EnglishAppSetup\MyProg.hlp" "ChineseApp\MyProg_cn.hlp" "PatchSetup\MyPatch.dat"
GenPat "EnglishAppSetup\Readme.txt" "ChineseApp\Readme_cn.txt" "PatchSetup\MyPatch.dat"
注意:以上全部命令连续执行,GenPat 会自动把所有这些文件的补丁合成在 MyPatch.dat 中。
5. 如无意外 MyPatch.dat 会在 PatchSetup 目录中产生,补丁生成后,进行下一步的补丁程序安装制作了。
6. 脚本如下,功能包含了自动检测以前的安装路径,自动备份原文件。

; 补丁安装程序制作脚本
; 脚本编写:restools (http://restools.yeah.net)
[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
if not FileExists(ExpandConstant('{app}\'+BackupDir+'\'+Filename)) then
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
INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页的更多相关文章
- 【分享】GEARS of DRAGOON 1+2【日文硬盘版】[带全CG存档&攻略+SSG改动+打开存档补丁]
冒险者们哟.寻找龙秘玉吧--! ninetail的最新作,是使用丰富多彩的技能·道具探索迷宫的3D迷宫RPG! 存在着骑士和神官的架空世界常见的职业为首的13种职业.超过数百种的道具的登场! 和伙伴一 ...
- 合金装备V 幻痛 制作技术特辑
合金装备V:幻痛 制作特辑 资料原文出自日版CGWORLD2015年10月号 在[合金装备4(Metal Gear Solid IV)]7年后,序章作品[合金装备5 :原爆点 (Metal Gea ...
- U+V2深度隐藏PE制作技术初探
所谓U+,习惯上是指用UltraISO软件把ISO文件写入U盘来制作启动盘的一种技术.第一代U+兼容性不太好,不推荐使用.目前,兼容性比较好的是第二代U+启动技术(USB-HDD+ V2/USB-ZI ...
- [Mugeda HTML5技术教程之12]制作跨屏互动应用
mugeda动画平台还可以用来制作跨屏互动的动画应用,比如在PC端的大屏幕上显示动画的主界面,同时会显示出供手机扫描的二维码,手机扫描后会在手机上显示手机端动画界面.通过手机就可以和PC端的显示界面跨 ...
- 使用 FreeCAD 打开 KiCad 用于制作外壳
使用 FreeCAD 打开 KiCad 用于制作外壳 先看导入后的结果. 步骤: 安装 FreeCAD 安装 KiCad StepUp Mod Addon 重启 FreeCAD(非常重要,不重启不生效 ...
- Web app制作细节:web app互动制作技巧
Google .微软.苹果三大巨头紧锣密鼓地在web app的研发产品领域圈地设岗,并试图建立以自己为中心的”云“服务平台,企图在web app时代到来的时候充当霸主.本文将围绕web app的制作, ...
- 【203】利用UltraISO制作和刻录光盘映像的方法
参考:利用UltraISO制作和刻录光盘映像的方法 软件:UltraISO注册版(制作镜像).rar 目录: 1.利用UltraISO制作光盘映像2.利用UltraISO刻录光盘映像文件 1.利用Ul ...
- SWF在线绘本批量制作高质量PDF的新方法(重点在批量制作)
SWF在线绘本批量制作高质量PDF的新方法(重点在批量制作) 2012-12-21 未来决定... http://www.ebama.net/thread-107643-1-1.html ...
- PageAdmin CMS网站制作教程实例:如何制作一个报名表?
PageAdmin CMS网站建设实例:如何制作一个报名表? 有时我们根据需求需要制作一些自定义表,该如何去制作呢? 我们以制作一个报名表为例: 登录后台地址,进入后台, 2.在顶部导航中找到系统,并 ...
随机推荐
- sentence patterns
第四部分 推理题 1.世界上每个角落的每个人都有立场,都有背景,都有推理性,能推理出一个人语言的真意,才成就了真正的推理能力: 2.换言之,如果你能通过一个人的说话推理出其身份职业,你的推理能 ...
- progresql - 常用的管理命令
1.查看当前数据库实例的版本 Select version(); 2.查看数据库的启动时间 Select pg_postmaster_start_time(); 3.查看最后load配置文件的时间 s ...
- 解决在国内更新android sdk时连不到服务器的问题
修改hosts文件 Windows下:打开C:\Windows\System32\drivers\etc\hosts Linux下:vi /etc/hosts 在文件尾加入如下两行: 74.125.2 ...
- HTML“计算机输出”标签 <code><kbd><samp><tt><var><pre>
我们并不反对使用它们,但是如果您只是为了达到某种视觉效果而使用这些标签的话,我们建议您使用样式表,那么做会达到更加丰富的效果. <code> 标签-定义计算机代码文本. 定义和用法: &l ...
- css\html布局及部分知识小分享~~~
近期发现和总结的知识跟大侠们分享,请大侠们多多评论指教一二? HTML 1.(1)body需设置页面默认字体大小 body{font-size:12px;} (2)IE6下png图片划过切换失效,建 ...
- 二分图最大权最小权完美匹配模板KM
在网上找了一份挺好的模板,先标一下哦~链接君:http://blog.csdn.net/abcjennifer/article/details/5844579 #include <iostrea ...
- Linux gcc 编译日记
gcc 编译器是众多编译器组合入口,例如在编译 .cpp 文件时,使用c++ 编译器,编译.c 文件时,使用c编译器. 在编译c++程序时, 库文件与头文件可通过 -L[dir] 指定库目录 , -l ...
- c#用牛顿法计算根号下2的值
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Fragment开发计划
Fragment是什么 Fragment正如字面意思所言是碎片,所以这是一个管理碎片时间的应用程序.目前考虑的是先在Android上实现,如果IOS的合作伙伴靠谱可以交给他做,如果不靠谱就等Andro ...
- Eclipse安装easyShell插件
easyshell是一个用于快速打开文件目录.复制文件路径.cmd打开等等的eclipse插件工具. Eclipse下安装easyshell: 1.打开Eclipse商店 2.输入easyShell点 ...