杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2282|回复: 0

[转]INNO setup 制作补丁(兼程序预检测基础教程)

[复制链接]
发表于 2015-1-23 13:11:48 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
作者: raindy
源地址:http://teach.hanzify.org/article/702-1274667264.html

注:原作者本意是汉化补丁制作教程,我个人感觉也是一个非常好的软件检测脚本,故此,特转载于此,希望朋友们循环!本人汉化的补丁多用Inno Setup 软件来发布,较为简洁。为适应学习要求,对简介部分做删改,望请见谅!


『学习目的』
  使用 Inno Setup 制作补丁(即:汉化文件与未汉化文件比较生成的差异文件),仅仅是执行了文件替换或文件复制操作,故而不算严格意义上的补丁。非常适用于非大型软件(包括多语言文件补丁),其主要思路如下:
  1)通过注册表键值判断是否已经安装原版程序;
  2)通过读取注册表键值判断原版的安装路径;
  3)将已汉化文件替换同名的未汉化文件或复制文件到指定目录。

『学习任务』
  汉化目标:用 INNO setup 制作 Cleanse Uninstaller Pro 6 的汉化补丁(示例文件为简体中文语言文件)

『操作步骤』
  1.通过注册表键值判断是否已经安装原版程序
  一般软件安装后,都会在注册表中添加相关键值,如本实例软件,安装原版后会添加如下键值:
  HKEY_LOCAL_MACHINESOFTWARECleanse
  只需在代码段添加如下代码即可判断是否已安装原版程序,代码如下:
  1. function ShouldSkipPage(PageID: Integer): Boolean;
  2. begin
  3. result := false;
  4. if PageID = wpSelectDir then result := true;
  5. end;
  6. function InitializeSetup(): Boolean;
  7. begin
  8.   Result := true;
  9. if not RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARECleanse') then
  10.   begin
  11.   MsgBox('未检测原英文版程序,请先行安装!'#13#13'软件汉化:张传伟 2009', mbInformation, MB_OK);
  12.   Result := False;
  13. end;
  14. end;
复制代码



  存在相关键值,可以继续安装补丁:
   InnoPatch-1.jpg

  不存在相关键值,提示用户安装原版:
   InnoPatch-2.jpg

  2.搜索注册表获取安装路径
  在“开始”菜单-“运行”中输入“regedit”,打开注册表编辑器,搜索“Crogram FilesZards softwareCleanse Uninstaller Pro”,由于注册表中搜索不到安装路径(如下图所示),只能搜索主程序以获取完整路径。
   InnoPatch-3.jpg

  获取 Cleanse Uninstaller.exe 文件所在位置的上级目录,即安装路径可以用下面两种不同代码实现。
  第一种方式: INNO setup 的 [setup] 段代码设置为:
  1. DefaultDirName={code:ExtractFilePath|{reg:HKLMSOFTWARECleanse,Path}} 
复制代码


  第二种方式
  (1)INNO setup 的 [setup] 段代码设置为:
  1. DefaultDirName={code:GetPath}
复制代码


  (2)INNO setup 的 [Code] 段添加如下代码设置:
  1. function GetPath(Param: String): String;
  2. var
  3.   strPath: String;
  4. begin
  5.     strPath := ExpandConstant('{pf}Zards softwareCleanse Uninstaller Pro');
  6.   if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARECleanse', 'Path', strPath) t        hen
  7.   begin
  8.         strPath := ExtractFilePath(strPath);
  9.   end;
  10.   Result := strPath;
  11. end;
复制代码



  当注册表能直接找到安装路径时,可以用{pf}代替实际的安装路径,如:
   InnoPatch-4.jpg
  对应注册表值如下
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREReallusionFaceFilter Studio.0]
.......
"Install Path"="C:\Program Files\Reallusion\FaceFilter Studio 2"
.......

  此时,可以在 INNO setup 的 [setup] 段代码设置为

  1. DefaultDirName={reg:HKLMSOFTWAREReallusionFaceFilter Studio.0,Install Path|{pf}}
复制代码


  3.将已汉化的 SChinese.lan 复制到软件安装路径的“LangFiles”子目录中,[File]段代码如下:

  1. Source: "E:HanzifySChinese.lan"; DestDir: "{app}LangFiles"; Flags: ignoreversion
复制代码


说明:关于此类从注册表判断是否安装程序或程序版本等脚本将会在本版块内多次重复出现,以方便初学者





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-15 19:54 , Processed in 0.123496 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表