最近需要给安装包增加一个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则不需要这个条件了

最新文章

  1. Proxy Pattern(Java动态代理和cglib的实现)
  2. DB2解除锁表
  3. 如何在ZBrush中将球体演变为头发
  4. 《JavaScript启示录》摘抄
  5. PHP 数组和对象的相互转化
  6. 14.6.3 Grouping DML Operations with Transactions 组DML操作
  7. 手机网站keyup解决方案
  8. Java基础---继承、抽象、接口
  9. 【Python3之迭代器,生成器】
  10. 理解WidowManager
  11. SQL Server 2008 R2中配置作业失败后邮件发送通知
  12. burnside+polya 整理
  13. ReentrantLock(重入锁)的使用
  14. Python2 - 基础2 - 数据类型和模块
  15. [UE4]C++中SpawnActor用法(动态创建Actor)
  16. Mac 10.12连接iSCSI硬盘软件iSCSI Initiator X
  17. dubbo服务引用与集群容错
  18. Mysql命令行访问
  19. tomcat 内存溢出原因分析及解决
  20. 004 Android XML文件常用五大页面布局方式

热门文章

  1. createElement(九)
  2. 一起学Vue之列表渲染
  3. 理解 nodeJS 中的 buffer,stream
  4. docker部署java应用程序
  5. 虚拟机win7 安装过程中遇到虚拟工具安装失败
  6. 银行贷款利率低到“令人发指”,很多人还坚持借高利贷,why?
  7. Oracle允许IP访问配置
  8. 小白学 Python 爬虫(24):2019 豆瓣电影排行
  9. Json.Net的介绍与简单实用(兼容2.0/3.0/3.5/4.5/RT)
  10. ts中接口的用法