Wix 安装部署教程(四) 添加安装文件及快捷方式

通过之前三篇的介绍,大家对wix的xml部署方式也应该有一些认识,今天天气不错,再来一发。主要介绍桌面,开始菜单,卸载等功能的如何添加。希望园友们支持!

一、如何添加文件

Demo打包程序很简单,就一个exe,但实际过程中,往往还要引用一些dll,配置文件。我们如何安装到目标文件下呢。这个就比windows installer 麻烦些了,在windows installer中直接一个添加引用就可以了。 但wix也不麻烦,首先要明白各个元素的作用,Directory定义了安装目录,ComponentGroup和DirectoryRef包含的Component和File 定义文件的正真的路径。然后Feature 就是一个安装清单,告诉wix需要安装的文件是哪些。 我们试着在安装目录下增加一个文件,放入一个dll和一个xml文件。

1.先在wix工程中新建一个文件夹,把我们需要打包的文件copy进来。

2.再修改目标文件夹。在Setup07下面加入一个Id="Demo"的Directory

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

3.定义需要添加的文件的位置。在Framment 元素块。添加一个DriectoryRef 元素,id指向Demo,

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <Component Id="ProductComponent">
        <File Id="myapplication.exe"  Source="$(var.MyApplication.TargetPath)" />
      </Component>
    </ComponentGroup>
   <DirectoryRef Id="Demo">
     <Component Id="Variable.xml" Guid="5E254682-DD5F-453D-8333-844457282026">
      <File Id="Variable.xml"  Source="content/Variable.xml" />
      <File Id="mydll"  Source="content/CxIODrvWrapper.dll" />
      </Component>
   </DirectoryRef>
  </Fragment>

我们可以看见,对于ComponentGroup直接用的是Dirctory属性INSTALLFOLDER指向上个Fragment中的Directory。他其中的file都可以安装在Setup07文件夹下。而我们的DirectoryRef 的Id指向我们创建的Demo文件夹,这里要说明的是Component 安装组件的意思,是必须和feature元素对应起来的,且其中可以包含多个File。然后修改我们的Feature元素。添加一段。关于Guid,直接在VS -工具-创建GUID 再copy出来就行。 不用每次都那么生成,把生产的随便改几个数字也行。

  <ComponentRef Id="Variable.xml"/>

这个ComponentRef就直接对应了id为Variable.xml的Component的元素,告诉wix 需要安装一个这样的组件。 这样在生成就可以安装了。在你的C:\Program Files (x86)\Setup07\Demo 目录下就可以看见dll和xml文件了。

上面的ComponentGroup也可以改掉。 效果一样。

 

二、增加菜单栏快捷方式

我们先在菜单栏中加入快捷方式

1.在安装目录Fragment元素中,添加一个Directory。记住这个要插入在<Directory Id="TARGETDIR" Name="SourceDir"> 下面。

<Directory Id="ProgramMenuFolder">
        <Directory Id="ApplicationProgramsFolder" Name="WixSetUp"/>
 </Directory>

这里的ProgramMenuFolder就是只的windows的开始菜单,第二级的directory就是要在菜单中显示的文件,名称为wixsetup。

2.接下我们再这个目录下加入快捷方式,需要用DirectoryRef元素了。Shortcut 就是生成快捷方式的元素。

 <DirectoryRef Id="ApplicationProgramsFolder">
      <Component Id="ApplicationShortcut" Guid="5A254682-DD5F-453D-8333-144457282026">
        <Shortcut Id="ApplicationStartMenuShortcut"
                  Name="Mysetup"
                  Description="my first application installed by wix"
                  Target="[INSTALLFOLDER]MyApplication.exe"
                  WorkingDirectory="INSTALLFOLDER"/>
        <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
        <RegistryValue Root="HKCU" Key="Software\Microsoft\MyApplicationName" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
      </Component>
    </DirectoryRef>

需要说明的是,Target的写法,指向我们安装目录下的exe,中括号中加入directory的Id,再紧跟应用程序的名字。 这里的RemoveFolder和Registry元素,官方文档说是为了避免出现ICE 验证错误才结合Shortcut一起出现,我也有点晕,只能先加上了。感兴趣的可以看下这里的http://msdn.microsoft.com/en-us/library/aa368942.aspx 对这种验证的解释。vs生成出错,都是ice开头的。

最后我们在feature中加入Component的列表。

 <ComponentRef Id="ApplicationShortcut" />

在编译生成,安装完成后,我们的菜单栏中就会出现WixSetup/Mysetup的目录。打开可以运行,但这个时候快捷方式的图标还没有改变,先记住这个问题,再继续往下走。

最近发现一个奇怪的问题,需要做成快捷方式的exe,他们的id必须和文件一直,否则这个快捷方式在安装之后找不到这个exe。

   <Shortcut Id="DesktopShortcut" Directory="DesktopFolder"   Name="Runtime " Target="[dirE77F08C3A4BE230B19F4D6C90A249E4F]HMIRun.exe"
                  WorkingDirectory="dirE77F08C3A4BE230B19F4D6C90A249E4F" Icon="Startshorcut" />
  <Shortcut Id="DesktopShortcut2" Directory="DesktopFolder"   Name="SACADDev" Target="[INSTALLFOLDER]SCADAFramework.exe"
              WorkingDirectory="INSTALLFOLDER" Icon="devshorcut" />
....<File Source=‘$(var.Dev)HMIRun\HMIRun.exe‘ Id=‘HMIRun.exe‘ />  

而如果换成加密的那种id,却找不到。

此时的全代码如下

 

三、增加网页和卸载快捷方式

在菜单栏的基础上,再增加一个Web快捷方式,可以跳转到你的门户网站。需要3步

1.先引入WixUtilExtension.dll  这个就不多说了(之前引用过)。

2.在工程的命名空间中加入这个扩展。这个就相当于c#的using了。

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"  xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" >

3.在二中的Component中加入

    <util:InternetShortcut Id="OnlineDocumentationShortcut"
               Name="Online"
                      Target="http://yourWebsit/Home/index"/>

和之前的Shortcut在同一级。 这样就ok了。再次安装多出一个online的快捷方式,点击跳转到指定网页。

我们再增加个卸载的快捷方式,现在只需要再添加个Shortcut就行了,Id为UninstProduct

    <Shortcut Id="UninstallProduct"
                          Name="Uninstall"
                          Description="Uninstalls My Application"
                          Target="[SystemFolder]msiexec.exe"
                          Arguments="/x [ProductCode]"/>

Target指向msiexec.exe 这才是正真执行卸载的程序,[SystemFolder] 对应它的位置。Argument通过productcode告诉它哪个是要卸载的程序。/x 就是卸载命令到这里差不多就完成了。但是之前图标没有换过来。这里就给第一个Shortcut加上一个图标。 修改为

  <Shortcut Id="ApplicationStartMenuShortcut"
                  Name="Mysetup"
                     Icon="MyApplicationIcon.exe"
                  Description="my first application installed by wix"
                  Target="[INSTALLFOLDER]MyApplication.exe"
                  WorkingDirectory="INSTALLFOLDER">
          <Icon Id="MyApplicationIcon.exe" SourceFile="content/MyApplicationIcon.exe.ico"/>
        </Shortcut>

就在这个内部加入了一个Icon属性和元素。Id命名的时候建议加上一个Icon,然后ico的图标制作,可以找在线的。这一块的代码如下

 

效果图如下:开始菜单栏中有三个图标,第一个是我们的应用程序,这个ico 看起有点模糊了。在线和卸载的图标是默认的,没有修改

四、增加桌面快捷方式

现在我们还差一个桌面的快捷方式。经过几番摸索,还是整出来了。

1.需要先增加一个文件目录 ,这就代表了再桌面。

    <Directory Id="DesktopFolder" Name="Desktop" />

2.再加入Shortcut,这个shortcut就不能在之前的那个地方写了,因为那是菜单栏的。 必须用DirectoryRef ,但icon还是可以用同样一个

<DirectoryRef Id="DesktopFolder">
      <Component Id="DesktopFolderShortcut" Guid="5A254682-DD1F-453D-8333-144457282026">
        <Shortcut Id="DesktopShortcut" Directory="DesktopFolder"   Name="myApplication" Target="[INSTALLFOLDER]MyApplication.exe"  WorkingDirectory="INSTALLFOLDER" Icon="MyIcon.exe">
        </Shortcut>
      <RegistryValue Root="HKCU" Key="Software\Microsoft\MyApplicationName" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
      </Component>
    </DirectoryRef>

注意,下面那个RegistryValue不加不行,果然ICEXX.... 报错。需要注册一下。 这样,再编译安装,桌面出现了快捷方式,程序运行时,在windows窗口下方的图标也变了,不再是默认的windo程序的图标了。

转自:http://www.cnblogs.com/stoneniqiu/p/3365017.html

时间: 2024-11-16 01:15:12

Wix 安装部署教程(四) 添加安装文件及快捷方式的相关文章

Lync Server 2010 安装部署系列四:安装&配置证书服务器

1.打开"服务器管理器" 2.添加角色 3.单击下一步按钮 4.勾选"Active Directory证书服务" 5.单击"下一步"按钮: 6.勾选"证书颁发机构"和"证书颁发机构Web注册",单击"下一步"按钮: 7.勾选"企业",单击"下一步"按钮: 8.勾选"根CA",单击"下一步"按钮: 9.勾选&q

WIX 安装部署教程(六) 为你收集的七个知识点

前段时间整理5篇WIX(Windows Installer XML)的安装教程,但还不够完善,这里继续整理了七个知识点分享给大家.WIX最新版本3.8,点击下载 WIX安装部署(一)同MSBuild自动生成打包文件 WIX安装部署(二)自定义安装界面和行为 WIX安装部署(三)自定义安装界面和行为 WIX安装部署(四)添加安装文件及快捷方式 WIX安装部署(五)Bootstrap 捆绑安装 1.设置路径变量 有的时候路径过长,文件又比较多,重复粘贴一个地址总是不舒服,而且要改起来也很麻烦,那这个

ceph详细安装部署教程(多监控节点)

一.前期准备安装ceph-deploy工具 所有的服务器都是用root用户登录的 1.安装环境 系统centos-6.5 设备:1台admin-node (ceph-ploy)  1台 monistor 2台 osd 2.关闭所有节点的防火墙及关闭selinux,重启机器. service iptables stop sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config chkconfig iptables off 3.编辑adm

SuSE系统之Weblogic安装部署(非图形安装)

目 录引言 1目的 1范围 1文档约定 1 应用部署准备 21.1.应用包及说明 21.2.硬件环境 21.3.软件环境 21.4.操作工具 2 xlcpt项目部署 32.1.weblogic配置信息 32.2.Weblogic安装准备工作 32.2.1.创建weblogic用户并设置同名密码(weblogic用户仅用于安装) 32.2.2.创建xlcpt用户并设置同名密码(xlcpt用户用于发布项目) 32.2.3.安装JDK 32.2.4.安装cronolog日志切割软件 42.3.Webl

Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议

在上一篇中,留下了许可协议的问题,目前已经解决.感谢网友武全的指点! 问题 一般我们是用WixVariable 来设定许可协议.如下所示: <WixVariable Id="WixUILicenseRtf" Value="license.rtf" /> 但在多语言中我们写成下面这样是不识别的.它会被直接当成文件路径,而报错,找不到文件. <WixVariable Id="WixUILicenseRtf" Value="

Wix 安装部署教程(九) --用WPF做安装界面

经常安装PC端的应用,特别是重装系统之后,大致分为两类.一类像QQ,搜狗输入法这样的.分三步走的:第一个页面可以自定义安装路径和软件许可.第二个页面显示安装进度条,第三个页面推荐其他应用.先不管人家怎么实现的,我们先回顾一下. QQ:       再一个就是分六步或七步走的,如QQ影音:欢迎界面,用户许可,安装组件,安装目录,安装进度,安装完成,有七步的,一般会多一些软件推荐.当然还有其他的,比如是基于ClickOnce打包的,就一个界面,一个进度条.没有安装目录选择,这一般不是商业软件.先说第

Skype For Business 2015综合部署系列四:安装 SFB Server服务器(1)

本篇博文进入Skype for business 2015 综合部署系列的第四部分:安装Skype for business Server 2015服务器  (1) .本文以lync.itwish.cn 服务器为例进行演示安装,详细介绍了Skype for Business Server 2015 的先决条件安装.创建文件共享.安装管理工具.准备 Active Directory.创建 Skype for Business Server 2015 的 DNS 记录及在 Skype for Bus

Hbase原理架构与安装部署教程

1. HBase是什么 1.1 HBase的概念 HBase基于Google的BigTable论文,是建立的==HDFS==之上,提供高可靠性.高性能.列存储.可伸缩.实时读写的分布式数据库系统. 在需要==实时读写随机访问==超大规模数据集时,可以使用HBase. 1.2 HBase的特点 ==海量存储== 可以存储大批量的数据 ==列式存储== HBase表的数据是基于列族进行存储的,列族是在列的方向上的划分. ==极易扩展== 底层依赖HDFS,当磁盘空间不足的时候,只需要动态增加data

Nginx详细安装部署教程

一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载Nginx及相关组件 Linux系统是Centos 6.5 64位,我直接切换到root用户下安装 进入用户目录下载程序 下载相关组件 [[email protected] src]# wget http://nginx.org/download/nginx-1.10.2.tar.gz 省略安装内容.