WIX如何在补丁中添加属性

时间:2018-02-21 14:09:28

标签: properties wix windows-installer patch

在发布的MSI中,我有硬编码的端口号,例如

<Property Id="HTTP_PORT1" Secure="yes" Value="1000" />
<Component Id="my.exe" Guid="*" Win64="yes" >
  <File Id="my.exe" KeyPath="yes" Source="my.exe" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\MyCompany" Name="Port1" Value="[HTTP_PORT1]" Type="integer" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\MyCompany" Name="Port2" Value="9000" Type="integer" />
</Component>

对于补丁,我的Patch.wxs看起来像这样:

<PatchFamily Id="Rollup" Version="1.0.100" Supersede="yes">
  <ComponentRef Id="my.exe"/>
</PatchFamily>

当我手动将这些注册表更改为&#34; 1111&#34;和&#34; 9999&#34;并应用补丁MSP,那些Port1和Port2被设置回&#34; 1000&#34;和&#34; 9000&#34;分别。所以我改变了#34; HTTP_PORT1&#34;并添加&#34; INT_HTTP_PORT2&#34;像这样:

<Property Id="HTTP_PORT1" Secure="yes" Value="#1000" >
  <RegistrySearch Root="HKLM" Key="SOFTWARE\MyCompany" Name="Port1" Type="raw" Win64="yes" />
</Property>
<Property Id="INT_HTTP_PORT2" Secure="yes" Value="#9000" >
  <RegistrySearch Root="HKLM" Key="SOFTWARE\MyCompany" Name="Port2" Type="raw" Win64="yes" />
</Property>
<Component Id="my.exe" Guid="*" Win64="yes" >
  <File Id="my.exe" KeyPath="yes" Source="my.exe" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\MyCompany" Name="Port1" Value="[HTTP_PORT1]" Type="string" />
  <RegistryValue Root="HKLM" Key="SOFTWARE\MyCompany" Name="Port2" Value="[INT_HTTP_PORT2]" Type="string" />
</Component>

我改变了像这样的Patch.wxs:

<PatchFamily Id="Rollup" Version="1.0.100" Supersede="yes">
  <ComponentRef Id="my.exe"/>
  <PropertyRef Id="HTTP_PORT1"/>
  <PropertyRef Id="INT_HTTP_PORT2"/>
</PatchFamily>

但是,Port1和Port2都会更改回原始值(尽管Port1现在是REG_SZ。) 这是预期的行为吗?是否可以在不使用Type1自定义操作的情况下使其在补丁中工作?

1 个答案:

答案 0 :(得分:0)

该组件中的可执行文件是keypath项。我验证您是否增加了该exe的版本,因为它有效地控制了该组件是否更新。您可以创建补丁安装的详细日志,以确切了解正在进行的操作。

在详细日志中需要查找的内容是它对my.exe的描述,是否覆盖了其他内容。另请注意,如果修补程序中的组件规则被破坏,则实际上将导致无法修补任何内容。如果是这种情况,您将在日志中看到SELMGR。