定制TortoiseSVN安装包

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

整体思路

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

clip_image002

(图一)

并在注册表“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:控制安装包中包含的可选及必选内容,在安装时供用户选择,如图二所示:

clip_image004

图二

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"?>

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

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

clip_image006

一路“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>
posted @ 2010-05-14 01:41  Xiongpq  阅读(1318)  评论(0编辑  收藏  举报