利用WIX制作安装包(1)

#installation

下载最新版本的WIX toolset 并安装DOWNLOAD

Wix toolset V3.5之后的版本已经可以集成到visual studio,我们可以直接在vs中编写代码,并借助vs进行编译。

#demo

首先打开 Visual Studio,然后选择创建WIX Setup Project. 创建完成之后的在项目中我们可以看到一个名为Product.wxs 的文件,其代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="" UpgradeCode="8e1efb05-1e12-40e5-abca-c8bd7965bf2a">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />

        <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="SetupProject1" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
            <!-- <Component Id="ProductComponent"> -->
                <!-- TODO: Insert files, registry keys, and other resources here. -->
            <!-- </Component> -->
        </ComponentGroup>
    </Fragment>
</Wix>

属性介绍:

 1. UpgradeCode 标签中的 UpgradeCode 是产品的版本id。产品的升级卸载全部要用到它,一旦指定之后就不要修改。
 2. product标签中的 id 是该产品当前版本的id。它每次在升级版本的时候都需要改变。
 3. Directory 定义产品安装目录的目录结构
 4. Feature 产品的功能列表
 5. MajorUpgrade 防止产品降级安装。
 6. Manufacturer 公司或者组织名称

#file

项目创建完成之后,我们需要往安装包里面添加文件。WIX添加文件的方法很方便,直接使用<File Source="文件路径" /> 就可以把一个文件添加到安装包中来。文件路径 可以用绝对路径和相对路径来表示,在Wix中相对路径的可能需要用到变量。例如:

$(var.ReferencedProjectName.TargetDir) 表示项目中引用的另一项目‘ReferencedProjectName‘的输出路径

$(env.WIXPATH) 表示系统的环境变量WIXPATH所指向的路径。

关于其它的表示方法请大家参阅官网。

在这里我们在项目中添加一个文件夹resource , 并在这个文件夹下添加一个TextFile1.txt,然后在上述代码中的//todo 注释的下面添加如下代码

<Component Id="ProductComponent" Guid="7B428173-1277-482B-BC2E-CC008F3B79F9">
    <File Source="resource/TextFile1.txt" />
</Component>

然后指定Manufacturer 后就进行编译,编译成功之后进行安装,之后大家在c:/programfiles(X86)/SetupProject1 的目录下就可以看到TextFile1.txt 文件了。就这样一个简单的安装包就制作成功了。 但是这一一个简单的安装包绝对不能满足我们日常的工作需要。下面我将为大家介绍如何实现一些另外的操作

#directory

自定义安装目录结构。修改directory结构目录为如下

<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir"
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLFOLDER" Name="SetupProject1">
                <Directory id="LOG" name="log"/>
                <Directory id="DATA" name="data"/>
            </Directory>
        </Directory>
    </Directory>
    </Fragment>

然后重新编译安装。就会发现安装之后的目录结构已经变成了如下

    -ProgramFiles(x86)
    --SetupProject1
    ---log
    ---data

#ui

WIX默认为我们提供了五种UI类型。关于每种UI的样式。请大家自己尝试或者查看文档。

  1. WixUI_Advanced Dialog Set
  2. WixUI_FeatureTree Dialog Set
  3. WixUI_Minimal Dialog Set
  4. WixUI_Mondo Dialog Set
  5. WixUI Dialogs

如果我们要引用任一UI,我们只需要在product.wxs 文件中添加如下代码

<UIRef id="WixUI_Advanced"/>

然后编译运行,就会看到UI已经发生了改变。如果需要自定义UI则需要重新编写一个UI,然后添加到WixUI_Advanced 的 UI Sequence中去.(请见下一篇)

#action

WIX 允许我们自定义Action。如果需要自定义Custom Action,我们需要另外创建一个类型为C# Custom Action Project 的项目。创建成功后,在项目中添加一个CustomAction.cs 然后编辑代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Deployment.WindowsInstaller;

namespace CustomAction1
{
    public class CustomActions
    {
        [CustomAction]
        public static ActionResult CustomAction1(Session session)
        {
            session.Log("Begin CustomAction1");
            return ActionResult.Success;
        }
    }
}

这样一个自定义的方法就定义好了。然后编译项目。该项目编译成功之后会有两个输出文件CustomAction.dllCustomAction.CA.dll. 其中以CA.dll 结尾的文件才是我们所需要的文件。 然后我们把CustomAction项目添加到之前创建的项目的引用中去。然后添加文件customAction.wxs 并添加如下代码

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
    <Binary Id="BINARYFILE" SourceFile="$(var.CustomAction.TargetDir)CustomAction1.CA.dll" />
    <CustomAction Id="CustomAction1" BinaryKey="BINARYFILE" DllEntry="CustomAction1" />
    </Fragment>
</Wix>

这样一个CustomAction就创建并引入成功了。下面我们就可以调用这个方法了。在WIX中Action的执行时有顺序的。如果我们要添加一个自定义事件,我们必须要指定它在什么事件之前或者之后执行,见如下代码,关于WIX的事件顺序请参考事件顺序

<InstallExecuteSequence>
    <Custom Action="CustomAction1" After="InstallFiles"/>
  </InstallExecuteSequence>

上述代码指定了在InstallFiles 方法执行完成之后立马执行CustomAction1. 就这样,一个自定义的方法就定义成功,并且被成功调用了。

利用自定义的CustomAction我们可以做一些自定义操作。比如写log文件或者其它。

下一篇我将为大家介绍如何使用WIX制作自定义界面,并且将自定义界面添加到UI序列中去

时间: 2024-12-10 14:26:46

利用WIX制作安装包(1)的相关文章

利用WIX制作安装包(3)

利用WIX安装服务非常简单.只需要短短几句话就可以.当我们创建好一个Windows服务之后.我们在项目中创建一个Service.wxs 文件来安装服务,并且编辑代码如下: <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Fragment> <Component Id

利用WIX制作安装包(2)

这一篇文章将为大家介绍如何使用WIX自定义UI.上一篇文章我们讲过WIX为我们提供了五种安装界面.每种安装界面都是由不同的Dialog组成.在这里我们挑选一种比较常用的界面WixUI_FeatureTree Dialog Set 来为大家介绍一下. 在WixUI_FeatureTree Dialog Set 中一共包含了如下几种Dialog. First-time install dialog sequence: - WixUI_WelcomeDlg - WixUI_LicenseAgreeme

InstallShield 12 制作安装包

目  录 一.       InstallShield安装... 2 二.       InstallShield 破解... 2 三.       制作安装包... 2 (一) 打开project... 2 (二) project助手页面... 3 1.Application Information:程序信息... 4 2.Installation Architecture: 安装包结构... 4 3.Application Files:指定安装的文件默认目标路径... 5 4.Applica

为自己编写的windows应用程序制作安装包

1 写好了一个windows程序之后如何制作安装包 这个在vs中就可以直接发布了,可以制作msi的安装包和exe的安装包. 2 window应用程序安装包做了哪些事情 rpm安装包的话,只是把相应的文件拷贝到不同的目录.那么window安装包做了什么呢? msi里面有一个table,里面是一条条的指令,windows installer会解释并执行这些指令. 它还是会把安装包里面的文件拷贝到相应的目录.关键是它除了拷贝还做了哪些事情呢? 3 安装包除了把相应的文件放到不同的目录下,还做了哪些事情

使用Qt installer framework制作安装包(不知道是否适合Mac和Linux?)

一.介绍 使用Qt库开发的应用程序,一般有两种发布方式:(1)静态编译发布.这种方式使得程序在编译的时候会将Qt核心库全部编译到一个可执行文件中.其优势是简单单一,所有的依赖库都集中在一起,其缺点也很明显,可执行程序体量较大,光Qt核心库加起来就得十多兆.(2)制作安装包发布.这种方式的原理也简单,就是将可执行程序和其依赖的库文件一起打包压缩,制作成安装包发布.制作安装包的工具挺多,今天要说的是Qt官方的安装包制作框架Qt installer framework.这个框架由Qt官方出品,广泛应用

java程序打包jre以及制作安装包

分享一篇文章: java程序打包jre以及制作安装包 传智&黑马咨询郑老师 java程序打包jre以及制作安装包Java的桌面程序写好以后只能在eclipse下运行是不可以的,还需要将程序拷贝到其他电脑上运行才可以,所以需要制作成其他电脑可以运行的文件,当然在安装有jdk的电脑上只需要将程序导出为jar文件就可以运行了,但是除了开发java程序人员的电脑上会安装jdk,其他人的电脑上不会有这个环境,所以还需要将java可运行的环境一同打包到程序中去,这样,在用户不安装jdk的情况下也可以运行.制

installshield 制作安装包中执行其他程序LaunchAppAndWait的简介

最近在研究用instanllshield来制作安装包,并进行数据的创建,掌握到installshield中的LaunchAppAndWait 函数该函数是在运行的时候,运行其他程序,并能传递参数以及是否静默运行的效果. 例如: szScriptPath =SUPPORTDIR+"\\CREATEORACLEUSER.SQL";    LongPathToQuote(szScriptPath, TRUE);    szCmdLine = DBUSER + "/" +

python制作安装包(setup.py)

1.制作setup.py from distutils.core import setup setup(name='Myblog', version='1.0', description='My Blog Distribution Utilities', author='lujianxing', author_email='[email protected]', url='http://blog.lujianxing.com', py_modules=['foo'] ) py_modules 定

使用Qt installer framework制作安装包

一.介绍 使用Qt库开发的应用程序,一般有两种发布方式:(1)静态编译发布.这种方式使得程序在编译的时候会将Qt核心库全部编译到一个可执行文件中.其优势是简单单一,所有的依赖库都集中在一起,其缺点也很明显,可执行程序体量较大,光Qt核心库加起来就得十多兆.(2)制作安装包发布.这种方式的原理也简单,就是将可执行程序和其依赖的库文件一起打包压缩,制作成安装包发布.制作安装包的工具挺多,今天要说的是Qt官方的安装包制作框架Qt installer framework.这个框架由Qt官方出品,广泛应用