Wix 添加值后清空MSI属性

Wix 添加值后清空MSI属性,wix,windows-installer,Wix,Windows Installer,当通过合并模块提供的CustomAction设置属性时,是否需要任何特殊处理?我有两个自定义操作,提供了三个属性,稍后将在合并模块中使用。它们由通常的C#代码设置: MSI日志报告属性已设置为以下值: MSI (s) (C0!DC) [11:58:04:615]: PROPERTY CHANGE: Adding APPSRVPORT property. Its value is '11376'. 在安装组件时,以下语句用于安装使用上面填充的MSI属性的注册表值: <RegistryVal

当通过合并模块提供的CustomAction设置属性时,是否需要任何特殊处理?我有两个自定义操作,提供了三个属性,稍后将在合并模块中使用。它们由通常的C#代码设置:

MSI日志报告属性已设置为以下值:

MSI (s) (C0!DC) [11:58:04:615]: PROPERTY CHANGE: Adding APPSRVPORT property. Its value is '11376'.
在安装组件时,以下语句用于安装使用上面填充的MSI属性的注册表值:

<RegistryValue Name="AppSrvPort" Value="[APPSRVPORT]" Type="string" />
有人能告诉我怎么解决这个问题吗?我已经检查了执行序列是否有效(即,在操作“WriteRegistryValues”之前设置属性)


提前谢谢

在合并模块的.wxs脚本中引用属性时,该属性将被模块化(即附加合并模块GUID)。因此,
元素实际上将被解释为:

<RegistryValue Name="AppSrvPort" Value="[APPSRVPORT.YOUR_MERGE_MODULE_ID]" Type="string" />
如果属性打算在主MSI和合并模块之间共享,则抑制模块化可能很有用:

<Property Id="APPSRVPORT" SuppressModularization="yes"/>


注意:抑制模块化将发出警告CNDL1006和CNDL1086,如果您知道自己在做什么,可以忽略这些警告。;-)

您能否确认自定义操作是立即执行的,并且实际上是在writeRegistryValue之前安排的(根据表中的序列号,而不仅仅是日志中的位置)?(在合并模块中设置缺少guid后缀的非内置属性也有点奇怪,但这不是问题所在。)但这是否也适用于合并模块中属性的引用?该属性被同一合并模块中定义的组件再次使用,并且该组件未在合并模块和MSI本身之间共享。@Marc抱歉,我误读了您的问题,但我所写的内容仍然适用。除非禁止模块化,否则
元素将尝试读取附加了合并模块ID的属性。您可以通过使用某种工具(例如)打开.MSM文件并查看
注册表
表来验证这一点。
<RegistryValue Name="AppSrvPort" Value="[APPSRVPORT.YOUR_MERGE_MODULE_ID]" Type="string" />
session["APPSRVPORT.YOUR_MERGE_MODULE_ID"] = port.ToString();
<Property Id="APPSRVPORT" SuppressModularization="yes"/>