zoukankan      html  css  js  c++  java
  • INNO setup 制作补丁(转)

    『补丁简介』
      汉化补丁,与软件安装包一样,都是汉化软件发布的形式,两者可以实现软件汉化的目的,但相较于安装包而言,汉化补丁则不涉及原程序的版权问题,且体积较小,便于传输。
      在 INNO setup 中,制作真正补丁可以调用 NSIS 中的补丁插件-VPatch 插件,详见陈维信的 Blog 《INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页》,链接地址为:http://restools.hanzify.org/article.asp?id=45
      这里介绍一种与前文不同的 INNO setup 补丁制作方法。该方法所编译生成的补丁,不含真正意义上的补丁数据(即:汉化文件与未汉化文件比较生成的差异文件),仅仅是执行了文件替换或文件复制操作,故而不算严格意义上的补丁。但该方法简单易行,非常适用于非大型软件(包括多语言文件补丁),其主要思路如下:
      1)通过注册表键值判断是否已经安装原版程序;
      2)通过读取注册表键值判断原版的安装路径;
      3)将已汉化文件替换同名的未汉化文件或复制文件到指定目录。


    『学习任务』
      汉化目标:用 INNO setup 制作 Cleanse Uninstaller Pro 6 的汉化补丁(示例文件为简体中文语言文件)
      原版 Cleanse Uninstaller Pro 6 下载地址:http://www.zardssoftware.com/trial.zip  下载文件 下载示例文件

    『操作步骤』
      1.通过注册表键值判断是否已经安装原版程序
      一般软件安装后,都会在注册表中添加相关键值,如本实例软件,安装原版后会添加如下键值:
      HKEY_LOCAL_MACHINE\SOFTWARE\Cleanse
      只需在[Code]段添加如下代码即可判断是否已安装原版程序,代码如下:
     


    程序代码 程序代码

    function ShouldSkipPage(PageID: Integer): Boolean;
    begin
    result := false;
    if PageID = wpSelectDir then result := true;
    end;
    function InitializeSetup(): Boolean;
    begin
      Result := true;
    if not RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Cleanse') then
      begin
      MsgBox('未检测原英文版程序,请先行安装!'#13#13'软件汉化:张传伟 2009', mbInformation, MB_OK);
      Result := False;
    end;
    end;

      存在相关键值,可以继续安装补丁:
      

      不存在相关键值,提示用户安装原版:
      

      2.搜索注册表获取安装路径
      在“开始”菜单-“运行”中输入“regedit”,打开注册表编辑器,搜索“C:\Program Files\Zards software\Cleanse Uninstaller Pro”,由于注册表中搜索不到安装路径(如下图所示),只能搜索主程序以获取完整路径。
      

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

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

      (2)INNO setup 的 [Code] 段添加如下代码设置:
    程序代码 程序代码
    function GetPath(Param: String): String;
    var
      strPath: String;
    begin
        strPath := ExpandConstant('{pf}Zards software\Cleanse Uninstaller Pro');
      if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Cleanse', 'Path', strPath) t\then
      begin
            strPath := ExtractFilePath(strPath);
      end;
      Result := strPath;
    end;

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

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


    程序代码 程序代码
      DefaultDirName={reg:HKLM\SOFTWARE\Reallusion\FaceFilter Studio\2.0,Install Path|{pf}}

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

    程序代码 程序代码
     
    Source: "E:\Hanzify\SChinese.lan"; DestDir: "{app}\LangFiles"; Flags: ignoreversion

     
  • 相关阅读:
    JS重修札记
    backbone简单札记
    通用前端开发框架(一)
    两天低效编程总结
    使用HTTP请求 查找指定位置附近的景点(GOOGLE 地图)
    Google Map上,加上座標點(POIs)
    iphone 反向地理解析 从坐标获得用户的具体位置信息
    iphone 计算大文件md5
    c#多线程下载
    iphone http同步 异步请求
  • 原文地址:https://www.cnblogs.com/mumble/p/2000774.html
Copyright © 2011-2022 走看看