使用WiX制作简单MSI安装程序

WiX完全用xml描述,使用命令行来生成。只要用任何一个文本编辑器就可以了。但是为了开发效率,我们还是借助于辅助工具比较好。是一般使用的工具是两个:一个Visual Studio插件,在WiX的安装包里面附带,另一个就是WiXEdit,WixEdit是编辑的XMLXML的源代码的图形化工具箱.WixEdit会让你创造体制条件与MSI和MSM测试wix工具箱.它提供了直观的、轻松的对话方式编辑wix文件来源。

下载和安装

1、下载Wix 3.0版本,目前还是beta。但是已经足够稳定了,可以应用于生产环境。

2、下载WixEdit

在安装完WiX之后在Visual Studio上有几个WiX的模板,我使用的是Visual Studio 2008,看起来是这个样子的。

 

创建一个新的WiX项目

1、文件--〉新建--〉项目

2、选择项目类型WiX,选择Wix项目模板点击确定

我们就创建了一个没有安装什么内容的WiX项目,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="77da05c4-1644-4bc3-ac14-c0f721fe31fe" Name="WixProject1" Language="1033" Version="1.0.0.0" Manufacturer="WixProject1" UpgradeCode="a897ccc5-1c81-47e0-a837-65c07a72a7bc">
        <Package InstallerVersion="200" Compressed="yes" />

        <Media Id="1" Cabinet="WixProject1.cab" EmbedCab="yes" />

        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLLOCATION" Name="WixProject1">
                    <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
                    <!-- <Component Id="ProductComponent" Guid="fc46b1a2-35e9-4a17-896b-80b2daaae567"> -->
                        <!-- TODO: Insert files, registry keys, and other resources here. -->
                    <!-- </Component> -->
                </Directory>
            </Directory>
        </Directory>

        <Feature Id="ProductFeature" Title="WixProject1" Level="1">
            <!-- TODO: Remove the comments around this ComponentRef element and the Component above in order to add resources to this installer. -->
            <!-- <ComponentRef Id="ProductComponent" /> -->
        </Feature>
    </Product>
</Wix>

<Wix/>元素是WiX安装程序的根,Product元素是我们的主角,只有一个Product元素,它要求有一个唯一的GUID和一个区域设置 ID(LCID 缺省时美国英语,1033)和upgradecode。产品名称(Name), 制造商(manufacturer), 和版本(version)是必须的。在 WiX 帮助文件的 WiX 架构部分中查看“Product 元素”页。如果向下滚动到“属性”部分,您可以看到为 Product 元素定义的属性,其中包括必需的属性。因此,可以证明 WiX 示例代码确实提供了 Product 元素需要的所有属性。

表 1 — Product 元素属性(部分列表)


名称


类型


说明


必需


Id


Autogenuuid


产品的产品代码 GUID。



语言


LocalizableInteger


产品的十进制语言 ID (LCID)。



制造商


字符串


产品制造商。



名称


字符串


产品的描述性名称。



版本


字符串


产品的版本字符串。


 

< Package\ > 元素是 Product 元素和 Module 元素的必需子元素。该包介绍了作为部分 .msi 摘要流提供的属性,在资源管理器中将鼠标停留在 .msi 上方时就会看到这些属性。

查看 WiX 帮助文件文档中 Package 元素的其他可用属性。请注意,我们可以指定安装程序版本、文件压缩,甚至安装权限(如果面向 Windows Vista)。

表 2 — Package 元素属性(部分列表)


名称


类型


说明


必需


Id


Autogenuuid


SKU 的程序包代码 GUID。



AdminImage


YesNoType


如果源是管理映像,则设置为“是”。


 


注释


字符串


可选注释(用于浏览)。


 


压缩


YesNoType


如果设置为“是”,则源中可包含压缩文件。


 


说明


字符串


产品的完整名称或说明。


 


InstallerVersion


整数


最低安装程序版本(最大数*100 + 最小数)。


 


InstallPrivileges


枚举


通过此属性指定在 Windows Vista 或更高版本上安装此程序包所需的权限。此属性的值应为下列值之一:

受限

设置为此值表明该程序包无需提升权限即可安装。

提升

设置为此值表明该程序包需要提升权限才能进行安装。此为默认值。


 


制造商


字符串


发布此包的供应商。


 


平台


字符串


此程序包支持的平台列表。


 

 

对于许多安装程序(例如本示例),最好在 MSI 中将所有安装源文件打包在一起。通过 Media 元素,我们只需指定希望将文件存储到压缩和嵌入式 .cab 文件即可。但是,更大的安装程序可能需要跨多个磁盘。在这种情况下,您需要在 WiX 源文件中定义多个 Media 元素,并根据需要将资源分配到每个磁盘中。

表 3 — Media 元素属性(部分列表)


名称


类型


说明


必需


Id


整数


Media 表的磁盘标识符。此数值必须等于或大于 1。



Cabinet


字符串


Cabinet 的名称(如果将存储在媒体上的部分文件或所有文件都压缩到了 Cabinet 文件中)。如果未使用任何 Cabinet,此属性必须为空。


 


DiskPrompt


字符串


磁盘名称,通常是磁盘上印刷的可见文本。此文本可本地化,用于提示用户何时需要插入此磁盘。此值将用于 DiskPrompt 属性的“[1]”中。使用此属性需要定义 DiskPrompt 属性。


 


EmbedCab


YesNoType


如果设置为“是”,则指示活页夹将 Cabinet 嵌入到产品中。此属性只能与 Cabinet 属性一起指定。


 


VolumeLabel


字符串


该标签指示卷的属性。这是 GetVolumeInformation 函数返回的卷标。如果 SourceDir 属性指的是可移动(软盘或 CD-ROM)卷,则在尝试安装文件之前可通过此卷标验证驱动器中是否存在适当的磁盘。此列中的条目必须与物理媒体的卷标匹配。


 

 

随后是一组<Directiory/〉元素,最外面的又一个“Targetdir”,这是一个虚拟的dir,用于包含其它的Directory,第二个是一个标准的Windows安装目录,第三个就是程序的安装目录,可以通过修改它的Name来指定我们的程序想安装的目录。

在安装目录里面是Component元素,每一个Component就是一组我们要放置到WiX的资源,就是在这个地方放置我们的安装文件。

Feature元素描述了一个安装元素,这里可能有很多的Feature元素,但是每一个Feature元素内部必须包含一个Component元素。

Feature/Component的关系甚至可以更复杂。因为<Component/>中的某些元素,比如<Shortcut/>,包含指向与Component关联的Feature的引用。这种来自<Component/>子元素的引用,被称作反向引用,有时也称作feature backlinks。复杂引用和反向引用的处理,可能是链接程序必须实现的最难的工作。

下面我们来自定义一个安装程序。

添加安装的图形界面
WiX的安装界面使用的是命令行模式,我们现在在增加一个图形的安装界面。WiX 3的图形界面在一个WixUIExtension里面定义,WixUI对话框库包含一套"stock"多话框,用来提供wizard风格的安装用户界面。用一个UIRef为安装包添加一个界面。WixUI可以自定义,比如在界面上显示图片或者添加、删除某个界面。WixUI对话框组件支持4种通用对话框序列:

WixUI_Mondo :包括整套对话框:welcome, license agreement, setup type (typical, custom, and complete), feature customization, directory browse, 和 disk cost。也包括Maintenance-mode对话框。当产品的某些特性在默认情况下不安装,或者典型安装和完全安装有很大不同时,使用WixUI_Mondo。
WixUI_FeatureTree :是WixUI_Mondo的简单版本。它去掉了setup type对话框。用户直接从许可协议界面进入feature customization界面。当默认情况下安装全部特性时,WixUI_FeatureTree比WixUI_Mondo更合适。
WixUI_InstallDir :不允许用户选择features, 但允许选择安装路径。
   Note: 要使用WixUI_InstallDir,你必须为WIXUI_INSTALLDIR设置一个值,该值由Directory的Id确定,作为初始的安装路径。
WixUI_Minimal :最简单的WixUI组件类型。唯一的界面组合了welcome 和 license-agreement对话框,去掉了feature customization对话框。当产品没有可选特性时,WixUI_Minimal是合适的。
WixUI_Advanced:可以对所有的对话框进行定义

使用Visual Studio 的项目模板非常的简单,按照下序步骤就可以完成,下面以WixUI_InstallDir 来说明:

1、添加WixUIExtension.dll的引用

2、添加下列两行代码到Product.wxs文件就可以了

      <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />
      <UIRef Id="WixUI_InstallDir" />

添加我们的安装文件

Visual Stuido的WiX模板有智能感知,但是还是只能一行一行的敲代码,我们可以借助于WixEdit来完成这个工作。

编译和安装

使用Visual Studio编译项目,运行安装程序测试一下。

本文来自合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号

时间: 2024-10-05 21:15:31

使用WiX制作简单MSI安装程序的相关文章

用Wix手工编辑XML制作C++ MSI安装程序,怎样保证安装新版本时候强制卸载旧版本,急急急!!!

问题描述 ★★我的问题如下,为了能说清楚,我写了比较长,希望能耐心看看★★本程序是一个网络监控客户端程序,安装好后会在系统中注册一个服务,为了和服务器端通信.我只是负责制作MSI安装程序,有人专门做开发,当然我对于VC++一无所知.按照常规我在wix的wxs中进行相应编辑设置,生成第一版MSI程序setup1.msi,安装在系统中,菜单显示版本号:1.4.0.3之后因为程序做了修改,所以我把版本号和ProductCode进行修改,再次生成第二版MSI安装程序setup2.msi这次根据客户要求,

用Wix手工编辑XML制作MSI安装程序,怎样保证安装新版本时候强制卸载旧版本,急急急!!!

问题描述 ★★我的问题如下,为了能说清楚,我写了比较长,希望能耐心看看★★本程序是一个网络监控客户端程序,安装好后会在系统中注册一个服务,为了和服务器端通信.我只是负责制作MSI安装程序,有人专门做开发,当然我对于VC++一无所知.按照常规我在wix的wxs中进行相应编辑设置,生成第一版MSI程序setup1.msi,安装在系统中,菜单显示版本号:1.4.0.3之后因为程序做了修改,所以我把版本号和ProductCode进行修改,再次生成第二版MSI安装程序setup2.msi这次根据客户要求,

谷歌推出Chrome浏览器的MSI安装程序

北京时间12月16日上午消息,谷歌正式推出了Chrome浏览器的MSI安装程序.这将使得企业用户能直接地运行Chrome浏览器,对谷歌而言,也是一种较为有效的进占IE浏览器市场的工具. 谷歌在Chrome博客上撰文写道,"今天我们宣布,Chrome浏览器将为IT管理员带来方便,使得他们根据其需要,更轻易地设置及运行浏览器,不管浏览器是在Windows.Mac还是Linux系统下."谷歌还表示,这个安装程序将使得使用标准浏览工具的企业能为他们的所有员工安装Chrome浏览器.谷歌还列出了

如何使用InstallShield8.0制作自己的安装程序

摘要 本篇文档会告诉你如何使用InstallShield开发平台来创建,编译,运行一个安装程序.在这篇文档中你会学习到安装过程中碰到的下面一些内容:加载安装文件,设置快捷方式,修改注册表,条件安装一些文件,注册com组件,更换安装界面,调试以及发布安装程序. 本篇文档主要分下面的6个部分内容: 创建,编译,测试安装的工程 设置快捷方式以及修改注册表 注册COM组件 Conditions and Properties 使用脚本修改安装程序 修改安装界面 下面我们来一步一步地跟我来学习如何制作安装程

求用vs2005c#制作的windows安装程序示例

问题描述 求一个windows桌面程序安转部署的完整示例,包括打包.net框架到程序里,创建快捷方式,选择安装路径等. 解决方案 解决方案二:发布程序...解决方案三:等待...............解决方案四:每人帮忙啊解决方案五:没人帮忙吗

Visual Studio DSL 入门14---用Wix制作安装程序

我们到现在为止已经对Vs.net dsl的基础知识进行了介绍,并且一步一步的完成了我们的状态机设计器的设计,在上一节结合T4模板生成了代码.但是我们一直还是在调试的项目中来做的, 怎么能够让我们做的这个状态机设计器能够提供给其它人使用呢,在这一节,我们就来做一个安装程序,这样在只安装了VS.NET的机器上,不用安装SDK就可以使用我们的设计器了. VS.NET DSL专门提供了针对DSL的安装项目,我们直接基于这个项目来制作我们的安装程序: 1.首先,向我们的解决方案中添加一个Dsl 安装项目,

ASP.NET制作功能完善的安装程序

象 ASP.ASP.NET 等诸多基于 Web 的应用程序的安装与部署一直是个麻烦事情,一般都是手工复制.手工修改相关配置文件(主要是数据库配置),和 Windows 上 Installer 或 Linux 上的 RPM 相比,这种方式显然一点技术含量都没有. 对于胖客户端应用,从很早开始就一直都有较为完善的安装程序制作工具了,如 InstallShield.InstallAnywhere.Wise Installer.SWIFT Installer 等等,其中一部分已经实现了跨平台,可以运行在

在.net安装程序部署SQL Server数据库

server|程序|数据|数据库 目录 l 摘要l 一般安装程序的制作l 在安装程序中部署SQL Server数据库1. 通过调用osql来执行数据库脚本文件2. 通过把脚本文件作为资源文件载入3. 通过sp_attach_db来创建数据库l 总结 摘要一个项目完成之后,安装程序的制作是一个必要的过程.如果需要部署数据库,则使安装程度的制作变得比较麻烦.使用visual studio.net可以非常方便的制作应用程序以及部署程序中需要的数据库.本文介绍了如何使用visual studio.net

使用Python实现跨平台的安装程序

引言 我们在使用类 Unix 系统时,经常会用到一些以".bin"或者".run"结尾的安装程序 (Installer).(为描述方便,这里我们使用"Bin 安装程序"来泛指这种安装程序.)Bin 安装程序不依赖于系统发行版自己的包 (package) 管理器来实现应用程序的安装和卸载,而是完全自己控制安装的整个过程,程序卸载的时候需要用户执行应用程序安装目录下的卸载脚本来完成. Bin 安装程序最大的好处就是可以运行在多种类 Unix 平台,以