最近需要给安装包增加一个windows服务组件,按照我的理解,我以为只需要Product.wxs加一段如下的标签就可以了
 <Componet Id="myservice">
<File Id="Service.exe" KeyPath="yes" Source="{Service.exe路径}">
<ServiceInstall Id="Installer" DisplayName="MyService" Name="MyService"/>
<ServiceControl Id="Control" Name="MyService" Start="install" Stop="both" Remove="uninstall"/>
</Componet>
但因为我这个项目包含的组件都是通过Heat.exe自动生成对应wxs文件的,而生成后的Service.wxs里面已经包含了我在上面需要引用的Service.exe。此时我再加上上面这段标签的话,会因为Service.exe被两个File标签重复引用而无法生成。
查了一圈最终找到了解决方案,让heat生成时特殊处理我的Service.exe,即修改Filter.xslt,增加如下标签
  <xsl:template match="wix:Component[contains(wix:File/@Source, 'Service.exe') and not(contains(wix:File/@Source, 'Service.exe.config'))]">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
<wix:ServiceInstall Id="Installer" DisplayName="MyService" Name="MyService"/>
<wix:ServiceControl Id="Control" Name="MyService" Start="install" Stop="both" Remove="uninstall"/>
</xsl:copy>
</xsl:template>
这样一来,在Heat生成wxs的时候,会在match的文件,即Service.exe的Component内附加ServiceInstall等安装Windows服务的标签。
PS:如果组件内同时存在.exe和.exe.config的话,match条件需要像上面一样增加一个not(contains(wix:File/@Source, 'Service.exe.config'))],否则生成时会因为heat给两个文件都附加了相同的ServiceInstall标签而无法进行后续处理。如果没有.exe.config则不需要这个条件了

wix在使用heat自动生成wxs时添加windows服务组件的更多相关文章

  1. mybatis-generator自动生成代码时,只生成insert方法

    今天使用mybatis-generator自动生成代码时,发现只能生成insert方法, 以前所有的方法都是可以生成的,查看网上解决办法和检查数据库表结构后, 发现2种可以解决的办法: 1.修改myb ...

  2. 自动生成Makefile时,关于Makefile.am编写

    最近编译一个项目的程序时,二十几个源代码文件放在六个文件夹中,而且各个文件中头文件互相包含.以前写过编译这样组织的源码的makefile,所以这次也就直接写了. 确实因为各个文件间的头文件互相包含,造 ...

  3. MVC中为自动生成实体类添加验证

    将额外的基于特性的元数据(象验证特性)施加到由VS设计器自动生成/维护的类的一个方法是,采用一个我们称之为“伙伴类(buddy classes)”的技术. 基本上来说,你创建另外一个类,包含你的验证特 ...

  4. 自动化API之一 自动生成Mysql数据库的微服务API

        本文演示如何利用Uniconnector平台,自动生成Mysql数据库的API,节约开发人员编写后台API的时间.使用生成API的前提是开发者有 自己的数据库,有数据库的管理权限,并能通过外网 ...

  5. 使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明【转】

    原文链接:https://blog.csdn.net/Donjuan/article/details/3865026在网上看到很多网友在.NET程序中调用Win32 API,或者调用自己的VC DLL ...

  6. (C++C#类型互转工具)使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明

    在网上看到很多网友在.NET程序中调用Win32 API,或者调用自己的VC DLL里面提供的函数的时候,总是被生成正确的C函数在C#中的正确声明而困扰,而生成C++中结构体在C#中的声明 - 天,没 ...

  7. C# 自动运行代码 (创建windows 服务的形式 )

    本文转载自:http://blog.csdn.net/csethcrm/article/details/17917721 1.      新建项目 1.1 右键解决方案 – 添加 – 新建项目 1.2 ...

  8. mybatis generator自动生成代码时 只生成了insert 而没有其他的

    mybatis框架提供了非常好用的逆向工程插件,但是在使用过程中会有很多问题. 我在使用中就遇到了只生成insert和insertSeletive方法,而不生成其他根据primary key查询更新删 ...

  9. MVC Code First 自动生成数据库时生成的表名会多了一个s

    如图:我的类文件都是不带s的

随机推荐

  1. 解决jquery.pjax加载后的异常滚动

    个人博客 地址:http://www.wenhaofan.com/article/20181106154356 在使用jquery.pjax的时候发现每次加载完成后都会将滚动条滚动至顶部,用户体验极不 ...

  2. 在npm上如何发布自己的包

    环境需要:node和npm 然后在本地建一个文件夹作为你要发布的模块 然后在这个文件夹下打开cmd 执行:npm init 按照提示写对应的,或者先不写也可以,最后y 这时候在mcrm这个文件夹下就出 ...

  3. eclipse怎么debug项目

    1.打断点,服务器debug启动 2.debug:打断点,加项目.f5:进入方法    f6:下一行代码   f8:执行到下一个断点处

  4. moveTo 与 moveBy的区别 (转贴)

    MoveTo和MoveBy可以使精灵移动,区别在于MoveTo是移动到给定的坐标点:而MoveBy是从当前坐标点移动给定的坐标点这么多的距离.举个例子,假定精灵当前的坐标点是(x, y),分别给Mov ...

  5. 关于“教室派”APP的使用报告和相关建议

    教室派APP能够很好的解决学生查询各教室占用情况这一问题,使用起来非常方便.用户可根据需要选取星期来查询不同教学楼教室使用情况. 编辑课表是其附带功能,但通过使用发现手动编辑课表效率太低,建议开发者加 ...

  6. Win10激活工具 —— HWIDGen的使用方法

    一:引言 众所周知,Windows系统在安装完成之后,第一步就是激活系统,网上的一些激活方法大多数都是KMS激活,激活持续时间为半年. 因此,我找到了一个可以永久激活的工具:HWIDGen,它可以数字 ...

  7. 安装proxmox VE(PVE)教程

    proxmox VE,又叫PVE,全称是 Proxmox Virtual Environment 官网地址:https://www.proxmox.com/en/ 1)在官网下载PVE最新镜像,笔者下 ...

  8. Django_RESTful API

    https://q1mi.github.io/Django-REST-framework-documentation/ 1. DRF(Django REST framework) 序列化的类 2. 解 ...

  9. JVM&GC详解

    1.JVM简介 JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器.它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序. ja ...

  10. 搭建Hexo实现个人网站详细教程

    全网最全小白搭建Hexo+Gitee/Coding/Github 全网最全小白搭建Hexo+Gitee/Coding/Github 本站内容已全部转移到https://www.myyuns.ltd,具 ...