在SharpDevolop中使用wix3製作中文安裝包

iDotNetSpace發表於2009-07-16

最近研究用SD3和wix3開發程式, 網上關於wix3的資源及教程真是少的可憐,而且大部分是英文的。對於我這種高中英文120多,大學英文七八十的人來說真的很艱難。本文參考了園子裡博友的文章,好了廢話不多說,正文如下:

【wix 是什麼】

 Wix 是微軟的開源的做 msi 安裝包的工具。使用 xml 描述架構,經過編譯連結後,得到 msi 安裝包。整個過程跟寫個程式差不多。

【用到的軟體】

 SharpDevelop: v3.0 c#IDE

 Wix                : 安裝包製作工具

 mallow           : 編寫 wix 檔案時的輔助工具,tallow 的增強版,幫助生成檔案列表

 WixEdit          : wix 檔案編輯器

 GuidGen         : 微軟的 guid 生成器,guid 在 wix 中佔有重要位置,需要頻繁用到

【開始】

 SharpDevelop 中已經整合有 wix。我的版本是 v3.0,整合的 wix 是 3.0.4917.0 的。 wix3.0 已經發布,下載地址http://sourceforge.net/projects/wix/files/

 在 SharpDevelop 中新建一個 setup 專案,選擇【WixUI Mondo】——這個是 wix 內建的幾個標準對話方塊專案之一。生成專案後,需要手工編輯預設的【files.wxs】和【setup.wxs】。

 這2個檔案怎麼編輯呢?一堆的xml標籤,毫無頭緒啊~~呵呵,請看【典型結構】。

【典型結構】

wix 檔案是標準的 xml 檔案。任何文字編輯器都可以編輯。setup.wxs如下:

 

 

xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    
<Product Id="*"
        Name
="軟體"
        Language
="2052"
        Version
="1.0.0.0"
        Codepage
="936"
        UpgradeCode
="825487A7-C3F9-44G5-B543-BB87BW239FBB"
        Manufacturer
="公司">
        
<Package Description="#Description"
            Comments
="Comments"
            InstallerVersion
="200"
            Compressed
="yes"/>
        
<!--
            Source media for the installation. 
             Specifies a single cab file to be embedded in the installer's .msi. 
        
--&gt
        
<Media Id="1" Cabinet="contents.cab" EmbedCab="yes" CompressionLevel="high"/>
        
<!--檢測必備環境--&gt
        
<PropertyRef Id="NETFRAMEWORK20" />
        
<Condition Message="您的計算機必須安裝.NET Framework 2.0,否則本軟體無法使用 ([NETFRAMEWORK20])">
          Installed OR NETFRAMEWORK20
        
Condition>
        
<!--檢測必備環境--&gt
        
<!-- Installation directory and files are defined in Files.wxs --&gt
        
<Directory Id="TARGETDIR" Name="SourceDir">
            
<!--開始選單--&gt
            
<Directory Id="ProgramMenuFolder">   
                
<Directory Id="ShortcutMenuFolder" Name="軟體" />   
            
Directory> 
            
<!--開始選單結束 --&gt
            
<!--桌面快捷方式 --&gt
            
<Directory Id="DesktopFolder" Name="Desktop">
                
<Component Id="DesktopSpider" Guid="aede1637-df5a-4c41-94b6-f077d03e5372">
                
<RegistryKey Root="HKCU"  Key="Software\AAA\desktop">
                
<RegistryValue Value="SPIDERClient" Type="string" KeyPath="yes" />
                
RegistryKey>
                
<Shortcut Id="shortcut.desk" Directory="DesktopFolder" Name="軟體" Target="[INSTALLDIR]ruanjian.exe" WorkingDirectory="INSTALLDIR"  IconIndex="0"/>
                
Component>
            
Directory>
            
<!--桌面快捷方式結束 --&gt
        
Directory>
        
<!--Targetdir 結束 --&gt
            
        
<!--開始選單設定 --&gt
            
<DirectoryRef Id="ShortcutMenuFolder">   
                  
<Component Id="ApplicationShortcut" Guid="C919F5ED-D2B3-42E8-9F7C-63269274FE79">   
                    
<Shortcut Id="ApplicationStartMenuShortcut" Name="軟體" Target="[INSTALLDIR]ruanjian.exe" WorkingDirectory="INSTALLDIR" />   
                    
<Shortcut Id="UninstallProduct" Name="解除安裝" Target="[System64Folder]msiexec.exe" Arguments="/x [ProductCode]" />   
                       
                    
<RemoveFolder Id="ShortcutMenuFolder" On="uninstall" />  
              
                    
<RegistryValue Root="HKCU" Key="Software\軟體" Name="installed" Type="integer" KeyPath="yes" Value="1"  />   
                  
Component>   
            
DirectoryRef> 
       
<!--開始選單 --&gt
          
        
        
<Feature Id="Complete"
                 Title
="軟體"
                 Description
="**軟體"
                 Level
="1"
                 ConfigurableDirectory
="INSTALLDIR">
                 
<ComponentRef Id="ExecutableFile"/>
                 
<ComponentRef Id="MyComponent"/>
                 
<ComponentRef Id="ApplicationShortcut"/>
                 
<ComponentRef Id="DesktopSpider"/>
        
Feature>
        
        
<!-- 
            Using the Wix UI library
 
            WixUI_Mondo includes the full set of dialogs:
             
            welcome
            license agreement
            setup type (typical, custom, and complete)
            feature customization
            directory browse
            disk cost. 

            Maintenance-mode dialogs are also included. 

            Use WixUI_Mondo when you have some of your product's features 
            are not installed by default and there is a meaningful 
            difference between typical and complete installs
        
--&gt
        
<UIRef Id="WixUI_Mondo"/>
    
Product>
Wix>

 

 

 

 需要注意到是:

     所有的 GUID 都要自己生成

     “公司”、“軟體”換成自己的

     標籤中表示了需要打包的檔案,這部分內容如果手工一個一個的寫是很煩人的。所以可以藉助上面【軟體】中提到的 mallow 協助。

 以下是 files.wxs基本內容

 

xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    
<Fragment>
        
<DirectoryRef Id="TARGETDIR">
            
<Directory Id="ProgramFilesFolder" Name="PFiles">
                
<Directory Id="INSTALLDIR" Name="軟體名">
                    
<Component Id="MyComponent" Guid="5432EBE2-66E1-48F0-A0BF-A256479B168E" DiskId="1">
                        
<File Id="LicenseFile" Name="license.rtf" Source="license.rtf"/>
                    
Component>
                    
<Component Id='ExecutableFile' DiskId='1' Guid='11111111-1111-1111-1111-111111111192'>
                        
<File Id='ruanjian_exe' Name='ruanjian.exe' Source="目錄/ruanjian.exe" />
                    
Component>
                
Directory>
            
Directory>
        
            
        
DirectoryRef>
    
Fragment>
Wix>

 

【本地化】

我們都習慣了安裝程式有個嚮導,一步一步的進行。不過預設生成的嚮導——比如我用的這個【WxUI Mondo】——介面文字是英文的,我們當然希望是中文的。wix 提供了中文的資原始檔。在使用light.exe連結時,增加命令列引數 -loc xxx.wxl 即可。不過在 SharpDevelop 中要怎麼做呢?

注意:以下內容摘自博友部落格,本部落格內上面的程式碼已經修改。

     在下一步之前,要先修改 setup.wxs 中的幾個地方,否則是不能支援中文的。

  

修改前修改後
  
Language="1033"Language="2052"
 Codepage="936"

     我們可以下載 3.0 的原始碼包,解開後,可以在原始碼目錄下的 src\ext\UIExtension\wixlib 得到 3.0 的 wixui_en-us.wxl 英文語言檔案;再下載 2.0 的 wixui_zh-cn.wxl 中文語言包,參照 wixui_en-us.wxl 稍微修改一下:

     

3.02.0修改後
 http://schemas.microsoft.com/wix/2006/localization">http://schemas.microsoft.com/wix/2006/localization">
&Back上一步(&B)上一步(&B)
…………所有的 overridalbe 都要加上

 然後將檔案 wixui_zh-cn.wxl 加入到 SharpDevelop 的 setup 專案中去,檔案的【Build Action】選擇【EmbeddedResource】即可。

 不過編譯的時候還會報錯,因為 wix 3.0 和 2.0 的結構不一樣,報錯的原因是有幾個地方 3.0 新增的,修改好 wixui_zh-cn.wxl 就行了。中文翻譯可以自己寫。

修改前修改後
 [ProductName] 安裝程式    
 目錄無效
 資訊圖示
 WixUI_Ico_Info
 禁止通過修復丟失和損壞的檔案、快捷方式和登錄檔項,修復最新安裝中的錯誤。
 禁止將 [ProductName] 從您的計算機中刪除。
 新資料夾

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-609333/,如需轉載,請註明出處,否則將追究法律責任。

相關文章