TortoiseSVN的MSI安装包是使用Windows Installer XML (WIX)生成的。关于WIX的语法在这里不做解释,有兴趣的可以在网上搜搜,资料很多。今天我们将通过修改TortoiseSVN源代码中WIX的配置文件,来实现TortoiseSVN英文安装包和简体中文安装包的合并,并指定TortoiseSVN的默认语言为简体中文。

整体思路

分析TortoiseSVN中文包的安装过程,我们可以知道,安装TortoiseSVN中文包就是在TortoiseSVN安装目录的Languages文件夹下添加如下文件及文件夹,

(图一)

并在注册表“HKEY_CURRENT_USER——Software——TortoiseSVN”键下添加“DWORD 值”,名称:LanguageID,值:2052,基数:十进制。

根据这些分析我们将使用以下步骤来完成这个工作:

1. 在TortoiseSVN英文版安装完毕后,将图一所示文件拷贝至安装目录的相应位置;

2. 在注册表中添加“LanguageID”键;

准备文件

1. 生成TortoiseSVN安装包所需要的文件,可以通过编译TortoiseSVN源代码(具体方法见“编译TortoiseSVN源代码”)或在已安装TortoiseSVN的计算机上拷贝获得。

编译TortoiseSVN后生成的文件位于TortoiseSVN源代码根目录的“bin\release\bin”文件夹下。

可以在TortoiseSVN源代码根目录下运行“Nant msi”来测试生成MSI安装包所需文件都是否全部生成完毕,若有缺失,请重新编译TortoiseSVN,或者从已安装TortoiseSVN的计算机上拷贝相应文件至相应目录(Nant有提示那些路径缺少那些文件)。

若安装文件没有缺失,则可以在源代码的根目录的“bin”下,找到我们生成的MSI安装包,当然这只是最原始的英文安装包。

2. 为了能够将中文安装包和英文安装包合并,需要将图一所示文件(可在已安装TortoiseSVN中文包的计算机上拷贝)拷贝至源代码根目录的“bin\release\bin\LanguagePack_zh_CH”目录下。

经过以上步骤,生成中文安装包所需文件都已准备就绪,下面我们通过修改WIX的配置文件来完成这个中文安装包的制作。

修改WIX配置文件

本次我们要修改的WIX配置文件主要有以下三个:

1. FeaturesFragment.wxs:控制安装包中包含的可选及必选内容,在安装时供用户选择,如图二所示:

图二

2. Includes.wxi:为文件夹等生成一个GUID,在WIX中必须有一个唯一的GUID来确定一个内容;

3. StructureFragment.wxs:控制安装时在用户计算机上进行的操作。

它们都位于源代码根目录的\src\TortoiseSVNSetup目录下。

知道了它们的作用,我们大概分析下思路。在FeaturesFragment中添加中文安装包的Features,然后在StructureFragment中声明该Features需要完成的工作(拷贝文件及修改注册表)。

修改配置文件步骤如下:

1. 在FeaturesFragment的Fragment配置节下添加:

<Feature Id="LanguagePack_zh_CN" Level="1" Title="LanguagePack_zh_CN" Description="Add LanguagePack_zh_CN" TypicalDefault="install" Absent="allow">

<ComponentRef Id="C__LanguagePack_zh_CN" />

<ComponentRef Id="C__zh_CN" />

<ComponentRef Id="C__RegistryLanguage" />

</Feature>

以上代码就声明了一个名为LanguagePack_zh_CN的Feature,并声明其包含了三个内容,若用户在安装时选择安装此Feature,则安装程序会到StructureFragment文件中找到相应的内容及操作。

2. 在StructureFragment文件中找到

<Directory Id="D__Languages" Name="Languages">

</Directory>

配置节,然后在其中添加如下代码:

<Component Id="C__LanguagePack_zh_CN" Guid="$(var.GuidLanguagePack_zh_CN)" Win64="$(var.Win64YesNo)">

<File Id="F__TortoiseBlame2052" Name="TortoiseBlame2052.dll" Source="..\..\bin\release\bin\LanguagePack_zh_CH\TortoiseBlame2052.dll" DiskId="1" />

<File Id="F__TortoiseIDiff2052" Name="TortoiseIDiff2052.dll" Source="..\..\bin\release\bin\LanguagePack_zh_CH\TortoiseIDiff2052.dll" DiskId="1" />

<File Id="F__TortoiseMerge2052" Name="TortoiseMerge2052.dll" Source="..\..\bin\release\bin\LanguagePack_zh_CH\TortoiseMerge2052.dll" DiskId="1" />

<File Id="F__TortoiseMerge_zh_CN" Name="TortoiseMerge_zh_CN.chm" Source="..\..\bin\release\bin\LanguagePack_zh_CH\TortoiseMerge_zh_CN.chm" DiskId="1" />

<File Id="F__TortoiseProc2052" Name="TortoiseProc2052.dll" Source="..\..\bin\release\bin\LanguagePack_zh_CH\TortoiseProc2052.dll" DiskId="1" />

<File Id="F__TortoiseSVN_zh_CN" Name="TortoiseSVN_zh_CN.chm" Source="..\..\bin\release\bin\LanguagePack_zh_CH\TortoiseSVN_zh_CN.chm" DiskId="1" />

</Component>

<Directory Id="D__zh_CN" Name="zh_CN">

<Directory Id="D__LC_MESSAGES" Name="LC_MESSAGES">

<Component Id="C__zh_CN" Guid="$(var.GuidSubversionMo)" Win64="$(var.Win64YesNo)">

<File Id="F__Subversion" Name="Subversion.mo" Source="..\..\bin\release\bin\LanguagePack_zh_CH\zh_CN\LC_MESSAGES\Subversion.mo" DiskId="1" />

</Component>

</Directory>

</Directory>

注:以上部分是设置在安装TortoiseSVN时,创建中文包文件夹,并将中文包所需DLL等拷贝至相应的目录。

其中:Source只的是我们准备文件时,将这些DLL存放的路径。编译生成MSI安装包时,将会到这个Source找到相应的文件,将他们压缩进MSI安装包。

<Component Id="C__RegistryLanguage" Guid="$(var.GuidRegistryLanguage)" Win64="$(var.Win64YesNo)">

<RegistryValue Root="HKCU" Key="Software\TortoiseSVN" KeyPath="yes" Name="LanguageID" Value="2052" Type="integer" />

</Component>

注:以上部分是在用户的注册表HKCU下,添加设置TortoiseSVN语言的键值。

3. 由于WIX添加内容时,必须有一个GUID,上面的代码中我们用到了“GuidLanguagePack_zh_CN、GuidSubversionMo、GuidRegistryLanguage” 所以必须在Includes.wxi中添加相应的GUID声明,代码如下:

<?define GuidLanguagePack_zh_CN="C9D757EE-F449-4c57-9351-14C95BD34708"?>

<?define GuidSubversionMo="CA29F083-DC3E-4524-944A-AAE68DEAF3D7"?>

<?define GuidRegistryLanguage="48916997-33F9-4b13-BF9E-87025C23744F"?>

上面加粗的文字,即为随机生成的GUID。

至此,WIX配置文件修改完毕,我们可以运行“Nant MSI”来生成这个中文安装包。然后会在源代码根目录“bin”文件夹下,找到我们生成的MSI安装包。

双击安装程序进行安装,可以在安装向导中,看到我们刚才自定义的“Language_zh_CN”的Feature,如下图所示:

一路“Next”安装下去,并重启计算机后,我们就可以使用中文版的TortoiseSVN了。

注:我们可以通过这个方法很方便地修改TortoiseSVN的安装包,达到我们需要的定制效果。

下面这段代码就是定制config文件的方法,有兴趣的可以看看。

<Directory Id="AppDataFolder" Name="AppDataFolder">

<Directory Id="Subversion" Name="Subversion">

<Component Id="C__CustomConfig" Guid="$(var.GuidCustomConfig)" Win64="$(var.Win64YesNo)">

<RegistryValue Root="HKCU" Key="Software\TortoiseSVN" KeyPath="yes" Name="ConfigCustomState" Value="1" Type="binary" />

<File Id="F__config" Name="config" Source="..\..\bin\release\bin\Config\config" DiskId="1"/>

<RemoveFolder Directory="Subversion" On="uninstall" Id="RemoveFolder_Subversion" />

</Component>

</Directory>

</Directory>

转载于:https://my.oschina.net/portal/blog/694825

定制TortoiseSVN安装包相关推荐

  1. Qt定制化安装包工具

    Qt定制化安装包 文章目录 Qt定制化安装包 Qt定制安装版1.0.0.0 简述 效果图 1.一键式脚本生成安装包build.bat 2.安装界面 3.安装中 4.完成安装 6.安装结果(安装目录:D ...

  2. tortoisesvn安装包和汉化包

    由于去tortoisesvn官网下载网络太卡,下载了个把小时 下载之后就在这里分享下64位的,windows版本的汉化语言包和安装包 版本 : TortoiseSVN-1.12.0.28568-x64 ...

  3. Installshield 12 安装包制作工具

    http://chorfung.blog.163.com/blog/static/1207120002010320104717707/ 一. 说明. 阅读对象:本人,IS的初学者. 适用版本:Inst ...

  4. 台式机安装EXSI,通过官方方式定制安装包

    台式机安装EXSI,通过官方方式定制安装包 需要使用第三方工具 ESXi-Customizer-PS 对安装镜像进行修改,加载我们想要的驱动. 下载和安装 PowerShell: https://do ...

  5. 火狐Firefox定制安装包制作流程

    准备工作:安装7z,下载最新完整版火狐安装包(推荐到mozzilia全球站点下,没有国内定制插件) 1.下载完整安装包,解压缩. 2.进入core目录,修改以下文件: Firefox-full-lat ...

  6. 【Python入门】你值得拥有的这八个实用工具安装包与实战项目

    1.推荐3个画图工具:几个常用的画图工具,这类工具可以帮助理清楚思路,像学习框架也可以用这些做出来. 2.推荐5个实用的编辑工具:工欲善其事必先利其器. 3.推荐4个优秀的实战项目:内功修炼得好,写代 ...

  7. python压缩包怎么安装-Python学习笔记-打包发布Python模块或程序,安装包

    Python模块.扩展和应用程序可以按以下几种形式进行打包和发布: python setup.py获取帮助的方式 python setup.py --help python setup.py --he ...

  8. Advanced Installer 制作.NetWeb部署安装包

    Advanced Installer 制作.NetWeb部署安装包 原文:Advanced Installer 制作.NetWeb部署安装包 因为是.Net的Web应用程序,所以想用Advanced ...

  9. CentOS6.5最小化安装+自定义安装包

    本文出自 "老男孩linux培训" 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/1564620 (1)系统安装类型选择及自定义额 ...

最新文章

  1. Spring RESTFul Client – RestTemplate Example--转载
  2. python中itertools groupby函数是干嘛的_Python-如何使用itertools.groupby()?
  3. 用C#操作word替换字符,用spire
  4. Shell学习笔记 - 环境变量配置文件(转)
  5. 鸿蒙系统存储空间,鸿蒙系统即将上线!看到内存要求后,网友:逼我换手机?...
  6. 应用市场中的应用转让
  7. jdbc批量更新_用集算器更新数据库的技巧
  8. CSS基础汇总——点击标题跳转详细博客【学习笔记】
  9. k8s dashboard_ASP.NET Core on K8S深入学习(2)部署过程解析与部署Dashboard
  10. 5.4 tensorflow2实现消除多重共线性、人均网络消费回归分析——python实战
  11. 判断数组中是否包含某一项 indexof 重复的判断不准_「JavaScript」: 老生常谈,数组类型...
  12. 目标检测YOLO系列论文对比
  13. Linux nohup命令详解
  14. SRSniffer抓包工具的使用
  15. 《人人都是产品经理》读书笔记-2020
  16. uniapp scroll-view组件横向滚动不生效
  17. 打开dashboard报错:xcelsius已经停止工作
  18. 基于OpenGL的3D天空仿真
  19. 只要两步,用Python将地址标记在地图上!
  20. 从IMDB上爬取MovieLens数据集中的详细电影信息

热门文章

  1. 离散数学与组合数学-05树
  2. Winform设置居中屏幕
  3. 如何在CSDN博客中插入代码块显示行号
  4. linux如何截断日志,linux 如何截取一段时间内log日志
  5. Cocos技术派 | 导入FBX模型实现真3d效果
  6. kali系统破解wifi密码
  7. 百度推广计划改为计算机端,百度推广怎么样搭建一个优秀的推广计划
  8. 美股当红炸子鸡Zoom“不务正业”卖硬件,这背后藏着它什么野心?
  9. 我眼中的光明·第二周
  10. http_build_query或者拼接链接等方式中timestamp变成×tamp问题