原文:Wix学习整理(7)——在开始菜单中为HelloWorld添加卸载快捷方式

通过前面的几篇随笔,我们已经给我们的HelloWorld提供了填写注册表信息,以及开始菜单快捷方式和桌面快捷方式。这些在安装时添加的内容,在卸载时也会自动地删除。但是,到目前为止,我们的卸载只有两种方式:通过原始安装包或控制面板中的卸载或更改程序。现在,我们来学习Wix如何为我们的HelloWorld在安装时在开始菜单中提供卸载的快捷方式。

一 添加卸载快捷方式

添加卸载的快捷方式也是通过<Shortcut>元素来实现的,关于如何添加快捷方式的更多详情,请参考本系列上一篇,在这里我们就讲讲添加卸载快捷方式的<Shortcut>元素的具体内容。

<Shortcut Id="UninstallHelloWorld"
Name="Uninstall"
Target="[SystemFolder]msiexec.exe"
Arguments="/x [ProductCode]"
Description="Uninstall HelloWorld" />

其中,Target指出了可运行程序msiexec.exe的位置,msiexec.exe是Windows Installer提供的客户端安装卸载程序服务。SystemFolder是Windows Installer预定义的属性,其值表示目标机器的System32文件夹所在路径,通常为C:\Windows\System32。Argument将安装包的ProductCode传递给msiexec.exe,告知要卸载的是哪一个产品。

完整的WiX源文件请看下面的Product.wxs,

Product.wxs

通过运行编译和链接命令,

candle Product.wxs
light Product.wixobj –out HelloWorld.msi –ext "C:\Program Files\WiX Toolset v3.6\bin\WixUIExtension.dll"

就生成了我们的HelloWorld.msi安装包文件。

二 验收我们的成果

双击HelloWorld.msi文件,安装HelloWorld。安装完成后,在开始菜单的所有程序下的HelloWorld目录下就看到一个命名为Uninstall的卸载快捷方式,如下图所示,

单击Uninstall快捷方式,就可以快捷地卸载我们安装的HelloWorld了。然后,你再去查看一下注册表中安装时填写的信息以及安装的开始菜单快捷方式和桌面快捷方式是否都已被删除。

是的,我们要做到无残留卸载!

Wix学习整理(7)——在开始菜单中为HelloWorld添加卸载快捷方式的更多相关文章

  1. Wix学习整理(5)——安装时填写注册表

    原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...

  2. Wix学习整理(6)——安装快捷方式

    原文:Wix学习整理(6)--安装快捷方式 一 为HelloWorld案例添加安装快捷方式 通常我们安装一个应用软件的时候,都喜欢在桌面或开始菜单中添加快捷方式以便我们快速访问.现在我们就在上篇添加注 ...

  3. Wix学习整理(4)——关于WiX文件格式和案例HelloWorld的分析

    原文:Wix学习整理(4)--关于WiX文件格式和案例HelloWorld的分析 关于WiX文件格式 .wxs是WiX的源文件扩展名..wxs文件以类XML文件的格式来指定了要构造Windows In ...

  4. Wix学习整理(3)——关于Windows Installer和MSI

    原文:Wix学习整理(3)--关于Windows Installer和MSI 关于Windows Installer Windows Installer是微软Windows操作系统自带的一个软件安装和 ...

  5. Wix学习整理(1)——快速入门HelloWorld

    原文:Wix学习整理(1)--快速入门HelloWorld 1 Wix简介 Wix是Windows Installer XML的简称,其通过类XML文件格式来指定了用于创建Windows Instal ...

  6. Wix学习整理(2)——HelloWorld安装添加UI

    原文:Wix学习整理(2)--HelloWorld安装添加UI 在前一篇随笔Wix学习整理(1)——快速入门HelloWorld中,我们制作的安装包安装界面太简单,没有与用户进行交互的过程.下面我们修 ...

  7. NSIS学习记录の----win8.1和win10对于NSIS创建的卸载快捷方式无法在开始目录下显示

    NSIS提供了很好的软件卸载功能编写的方法,但是针对win8.1和win10操作系统,由于开始目录的权限限制,我们有时候并不能完美的完成所需要的功能----卸载程序的快捷方式不能显示.话不多说,下面提 ...

  8. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  9. TweenMax学习整理--特有属性

    TweenMax学习整理--特有属性   构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓 ...

随机推荐

  1. Writing a Windows Shell Extension(marco cantu的博客)

    Writing a Windows Shell Extension This is a technical article covering the content of my last week s ...

  2. Cloudera Hadoop 4 实战课程(Hadoop 2.0、集群界面化管理、电商在线查询+日志离线分析)

    课程大纲及内容简介: 每节课约35分钟,共不下40讲 第一章(11讲) ·分布式和传统单机模式 ·Hadoop背景和工作原理 ·Mapreduce工作原理剖析 ·第二代MR--YARN原理剖析 ·Cl ...

  3. javascript 中对this关键字的一些理解

    var self = this 可能会觉得奇怪为什么我会定义一个_self的变量, 因为在js里,this不用对于其他的对象语言,他的解析过程与运行过程中this会改变的.这里简单说说js里this的 ...

  4. 通过cl_dd_document来实现在ALV中输出标题头

    *&---------------------------------------------------------------------* *& Report ZTEST_LIN ...

  5. the least common multiplier

    Description There are many unsolvable problem in the world.It could be about one or about zero.But t ...

  6. hdu1114

    完全背包的水题,不过今天才学动态规划,就这样啦……hahahah!!! 完全背包跟普通背包的区别是普通背包从后往前循环,以防止被替换 完全背包是从前往后循环,后面的状态会跟着之前状态的改变而改变…… ...

  7. C#实现环形队列

    概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: public class MyQueue<T& ...

  8. 与众不同 windows phone (2) - Control(控件)

    原文:与众不同 windows phone (2) - Control(控件) [索引页][源码下载] 与众不同 windows phone (2) - Control(控件) 作者:webabcd介 ...

  9. 浅谈mapreduce程序部署

    尽管我们在虚拟机client上能非常快通过shell命令,进行运行一些已经封装好实例程序,可是在应用中还是是自己敲代码,然后部署到server中去,以下,我通过程序进行浅谈一个程序的部署过程. 在启动 ...

  10. 低头看—SQL视频

    迷迷糊糊半个月过去了,耿大姐的数据库视频也在一知半解中看完.虽然耿大妈讲的很详细,很细心,但是我还是时不时的犯困(还不如看儿童英语动画片有精神呢)视频看是看完了,但东西不是自己的.这个时候就需要“颗粒 ...