使用WiX 3.5,我有一个带有实例转换的MSI,允许我在具有不同产品名称的同一台机器上安装软件.为此,我在条件定义的.wxs文件中有一个"硬编码"的产品ID和名称列表.但是,我只有一个包含文件和非文件资源的Feature-ComponentRef定义.
安装似乎工作正常,但卸载实例演示了这两个来源中提到的行为:
http://msdn.microsoft.com/en-us/library/aa367797(v=VS.85).aspx
和
具体来说,除了我的应用程序的最后一个实例之外,没有任何非文件资源(在这种情况下,注册表项)被卸载.(即,如果我按此顺序卸载:instance1,instance2和instance3 - 只删除instance3的非文件资源.
我假设这与非文件组件没有唯一的GUID有关(而这对文件组件来说不是问题)
所以,我想知道一个有效的方法是使用一个产品ID,名称和一组功能来定义单个.wxs文件,但是有一个自定义引导程序为产品和非文件组件生成新的GUID然后插入在运行时进入MSI数据库?即,当需要卸载或更新时,我会在注册表中查询已安装的实例并检索其GUID.
这将允许在运行时创建实例,而不是事先在.wxs中进行硬编码,并且可以干净地卸载.
那有意义吗?Burn会让一切变得更好吗?:)
所以,我正在尝试使用heat为我的项目中的文件生成片段.看看我过去生成的文件,以及来自网络的各种WiX文章,我看到我有目录/组件的碎片,然后是使用ComponentRef定义ComponentGroup的Fragment.
<Fragment>
<DirectoryRef Id="dir0D9F6D272B6344EBFCF7EED0D14AA801">
<Component Id="cmp0BA12DCC33EB11DEB149261CF6904AAE" Guid="392C95D2-37C1-464E-9979-3E9D2BF57FEE">
<File Id="filB95C5D2C0575B59E63201E24176D55FB" KeyPath="yes" Source="SourceDir\something.dll" />
</Component>
<Component Id="cmp895927B450519C5487FDEC914051E715" Guid="DDC12130-C5D5-4727-95D8-660F7229BBD7">
<File Id="fil8C5E22B3AFE9AA6056E1458BD93E3646" KeyPath="yes" Source="SourceDir\whatever.dll" />
</Component>
</Fragment>
<Fragment>
<ComponentGroup Id="SampleProduct">
<ComponentRef Id="cmp0BA12DCC33EB11DEB149261CF6904AAE" />
<ComponentRef Id="cmp895927B450519C5487FDEC914051E715" />
</ComponentGroup>
</Fragment>
Run Code Online (Sandbox Code Playgroud)
热量不应该生成这个ComponentGroup片段吗?或者我是否手动完成并忘记了我这样做了?我在网络上找到的各种Heat示例似乎表明Heat确实产生了这个片段.
我正在做的事情:热情.-gg -g1 -cg什么是-out test.wxs
它产生ComponentGroup/Component的碎片 - 找到一个可以找到的ComponentRef:
<Fragment>
<ComponentGroup Id="WhatThe">
<Component Id="cmp9BDA89E67E0D566068C97D3FA3AEBE70" Directory="dir54021DE1C7E3016732B498A5B2680893" Guid="392C95D2-37C1-464E-9979-3E9D2BF57FEE">
<File Id="filDE3AEB1672B47F4803B1EDAB6016DDD3" KeyPath="yes" Source="SourceDir\something.dll" />
</Component>
<Component Id="cmpA8D6F6019E02CAD0DDA17E2F285D7EC8" Directory="dir54021DE1C7E3016732B498A5B2680893" Guid="DDC12130-C5D5-4727-95D8-660F7229BBD7">
<File Id="filDB325609DF363696B3F5E8D1FC22D4C5" KeyPath="yes" Source="SourceDir\whatever.dll" />
</Component>
</ComponentGroup>
</Fragment>
Run Code Online (Sandbox Code Playgroud)
我错过了什么?除了中期记忆?
谢谢