WiX Toolset

原文: WiX Toolset

  公司换软件打包平台,弄了一个月,Wix toolset的中文资料真的不多,逼着自己看了不少英文资料,终于弄懂了WiX打包的过程,做出了满足要求的安装包

  一点基本概念:(From WiX 技巧)

“WiX 使用声明性语言,而不是过程性语言,这意味着您要描述您的安装将是什么样子的,而不用描述为了实现它需要执行哪些步骤。这可能与您的习惯不同,但它非常容易掌握。通常,要安装在目标计算机上的描述文件将填充 WiX 源文件。在 WiX 源文件中,有三个与您希望安装的文件有关的主要元素:文件、组件和功能。文件元素是对单个文件的引用。文件必须包含在组件元素中,组件元素是最小的安装单 位。就是说,如果您有一个包含 100 个文件的组件,并且您要安装该组件,则会安装它包含的所有文件。相反,如果不安装该组件,则不安装任何文件。建议不要创建包含大量文件的组件。组件始终包含在功能元素中,并且可以包含在多个功能中。功能是一组组件,也可能是一组子功能。如果安装程序具有允许用户选择要安装哪些项的图形界面,则用户实际是在选择功能。”

  前期也做过不少调研:Inno、Nsis、WiX,(很感谢QQ群里的热心人O(∩_∩)O~)

  说实话,我是比较倾向于前两种打包方式的,客观的说,Inno的下载量少的惊人(http://sourceforge.net),后期的维护也比较困难,Nsis比较成熟,是主流的解决方案。但是作为WiX,它和C#的兼容性比较好,后面写custom(自定义动作)就可以用C#写,使用的语言比较新,维护起来还ok。

  使用软件:VS2010 + WiX Toolset

  寻求帮助方式:StackOverflow tagged wix OR Volunteer Mailing list OR Paid support

  Step By Step:下载安装 WiX (URL:http://wixtoolset.org/releases/

  1、安装后打开VS2010会看到如下界面:

    WiX Toolset_第1张图片

  2、点击新建Setup Project,就可以建立一个WiX的工程。Setup Project建立一个安装程序(可以生成msi安装包);有多个msi的时候,就需要建立Bootstrapper工程;Custom Action 用于做自定义动作。

  3、看到product.wxs文件(刚学时,苦于没有最简代码,网上找了一个例子),修改如下:

  

<?xml version="1.0"?>
<?define ProductVersion = "0.0.1"?>
<?define ProductUpgradeCode = "12345678-1234-1234-1234-111111111111"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
   <Product Id="*" UpgradeCode="$(var.ProductUpgradeCode)" 
            Name="Example Product Name" Version="$(var.ProductVersion)" Manufacturer="Example Company Name" Language="1033">
      <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/>
      <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/>
      <Icon Id="ProductIcon" SourceFile="example.ico"/>
      <Property Id="ARPPRODUCTICON" Value="ProductIcon"/>
      <Property Id="ARPHELPLINK" Value="http://www.exampleproduct.com"/>
      <Property Id="ARPURLINFOABOUT" Value="http://www.examplecompany.com"/>
      <Property Id="ARPNOREPAIR" Value="1"/>
      <Property Id="ARPNOMODIFY" Value="1"/>
      <Upgrade Id="$(var.ProductUpgradeCode)">
         <UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/>
         <UpgradeVersion Minimum="0.0.0" Maximum="$(var.ProductVersion)" IncludeMinimum="yes" IncludeMaximum="no" 
                         Property="OLDERVERSIONBEINGUPGRADED"/>      
      </Upgrade>
      <Condition Message="A newer version of this software is already installed.">NOT NEWERVERSIONDETECTED</Condition>

      <Directory Id="TARGETDIR" Name="SourceDir">
         <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLDIR" Name="Example">
               <Component Id="ApplicationFiles" Guid="12345678-1234-1234-1234-222222222222">
                  <File Id="ApplicationFile1" Source="example.exe"/>
               </Component>
            </Directory>
         </Directory>

         <Directory Id="ProgramMenuFolder">
            <Directory Id="ProgramMenuSubfolder" Name="Example">
               <Component Id="ApplicationShortcuts" Guid="12345678-1234-1234-1234-333333333333">
                  <Shortcut Id="ApplicationShortcut1" Name="Example Shortcut Name" Description="Example Product Name" 
                            Target="[INSTALLDIR]example.exe" WorkingDirectory="INSTALLDIR"/>
                  <RegistryValue Root="HKCU" Key="Software\Example Company Name\Example Product Name" 
                            Name="installed" Type="integer" Value="1" KeyPath="yes"/>
                  <RemoveFolder Id="ProgramMenuSubfolder" On="uninstall"/>
               </Component>
            </Directory>
         </Directory>
      </Directory>

      <InstallExecuteSequence>
         <RemoveExistingProducts After="InstallValidate"/>
      </InstallExecuteSequence>

      <Feature Id="DefaultFeature" Level="1">
         <ComponentRef Id="ApplicationFiles"/>
         <ComponentRef Id="ApplicationShortcuts"/>         
      </Feature>
   </Product>
</Wix>

  
  点F6编译,看到错误提示,添加缺少的文件,一个最基本的安装包就做好了。
  
 

你可能感兴趣的:(tools)