zoukankan      html  css  js  c++  java
  • 在SharpDevolop中使用wix3制作中文安装包

    最近研究用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. 
            
    -->
            
    <Media Id="1" Cabinet="contents.cab" EmbedCab="yes" CompressionLevel="high"/>
            
    <!--检测必备环境-->
            
    <PropertyRef Id="NETFRAMEWORK20" />
            
    <Condition Message="您的计算机必须安装.NET Framework 2.0,否则本软件无法使用 ([NETFRAMEWORK20])">
              Installed OR NETFRAMEWORK20
            
    </Condition>
            
    <!--检测必备环境-->
            
    <!-- Installation directory and files are defined in Files.wxs -->
            
    <Directory Id="TARGETDIR" Name="SourceDir">
                
    <!--开始菜单-->
                
    <Directory Id="ProgramMenuFolder">   
                    
    <Directory Id="ShortcutMenuFolder" Name="软件" />   
                
    </Directory> 
                
    <!--开始菜单结束 -->
                
    <!--桌面快捷方式 -->
                
    <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>
                
    <!--桌面快捷方式结束 -->
            
    </Directory>
            
    <!--Targetdir 结束 -->
                
            
    <!--开始菜单设置 -->
                
    <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> 
           
    <!--开始菜单 -->
              
            
            
    <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
            
    -->
            
    <UIRef Id="WixUI_Mondo"/>
        
    </Product>
    </Wix>

     需要注意到是:

         所有的 GUID 都要自己生成

         “公司”、“软件”换成自己的

         <File> 标签中表示了需要打包的文件,这部分内容如果手工一个一个的写是很烦人的。所以可以借助上面【软件】中提到的 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 中的几个地方,否则是不能支持中文的。

      

    修改前修改后
     <?xml version="1.0"?>  <?xml version="1.0" encoding="utf-8"?>
    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修改后
     <WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization"> <WixLocalization> <WixLocalization Culture="zh-cn" xmlns="http://schemas.microsoft.com/wix/2006/localization">
    <String Id="WixUIBack" Overridable="yes">&amp;Back</String> <String Id="WixUIBack">上一步(&amp;B)</String> <String Id="WixUIBack" Overridable="yes">上一步(&amp;B)</String>
    …… …… 所有的 overridalbe 都要加上

     然后将文件 wixui_zh-cn.wxl 加入到 SharpDevelop 的 setup 项目中去,文件的【Build Action】选择【EmbeddedResource】即可。

     不过编译的时候还会报错,因为 wix 3.0 和 2.0 的结构不一样,报错的原因是有几个地方 3.0 新增的,修改好 wixui_zh-cn.wxl 就行了。中文翻译可以自己写。

    修改前修改后
      <String Id="InvalidDirDlg_Title" Overridable="yes">[ProductName] 安装程序</String>    
      <String Id="InvalidDirDlgText" Overridable="yes">目录无效</String>
      <String Id="InvalidDirDlgIconTooltip" Overridable="yes">信息图标</String>
      <String Id="InvalidDirDlgIcon" Overridable="yes">WixUI_Ico_Info</String>
      <String Id="MaintenanceTypeDlgRepairDisabledText" Overridable="yes">禁止通过修复丢失和损坏的文件、快捷方式和注册表项,修复最新安装中的错误。</String>
      <String Id="MaintenanceTypeDlgRemoveDisabledText" Overridable="yes">禁止将 [ProductName] 从您的计算机中删除。</String>
      <String Id="UITextNewFolder" Overridable="yes">新文件夹</String>

     本人已经修改成功了WIX3.0 的 WixUI_zh-cn.wxlWixUI_zh-tw.wxl中文语言包,提供免费下载中文资源包.rar

    参考资料:

    (先推广下自己的新站: www.gba365.com psp资讯教程攻略电影游戏)

    1.在SharpDevolop中使用wix以及中文支持

    http://blog.csdn.net/blackwhole/archive/2009/03/21/4013233.aspx

    2.WIX 安装包制作指南

    http://www.cnblogs.com/itrust/archive/2008/05/30/1210763.html

    3.官方教程

    http://www.tramontana.co.hu/wix/index.php

    4.MSDN资料

    http://msdn.microsoft.com/zh-cn/magazine/cc163456.aspx#S1

  • 相关阅读:
    UVA 11995
    LA 5031
    防卫导弹
    跳马问题
    UVA 11992
    POJ 3264 Balanced Lineup
    0-1背包
    石子合并
    小技巧
    Android广播中有序和无序的区别
  • 原文地址:https://www.cnblogs.com/wfwup/p/1524708.html
Copyright © 2011-2022 走看看