一旦DLL的注册被更改,WIX自动化和补丁行为

时间:2010-01-31 22:14:15

标签: wix windows-installer wix3

我有基本的问题,我不明白,我们使用HEAT来消耗其中一部分是COM DLL的工件目录。 作为打包的WXS文件的一部分,我看到注册表中有一些元素:

<Component Id="cmpAE50B39B8817E1840F09193686006FFA" Guid="*">
  <File Id="fil7BDB953AB6AAEC9E98E28F49D87BABA3" KeyPath="yes" Source="SourceDir\ucfDistribution.dll">
    <TypeLib Id="{88B7EEC8-DF2B-11D4-A508-005004ED3088}" Description="ucfDistribution" HelpDirectory="dir83BF4093F80DD11BB416BF39954702C2" Language="0" MajorVersion="14" MinorVersion="13">
      <Class Id="{3AA1580F-1DA2-44A5-B581-98D861C2A0CD}" Context="InprocServer32" Description="ucfDistribution.ucfCMAXMLClass" ThreadingModel="apartment" Version="14.13" Programmable="yes">
        <ProgId Id="ucfDistribution.ucfCMAXMLClass" Description="ucfDistribution.ucfCMAXMLClass" />
      </Class>
      <Interface Id="{A98DFC45-F161-442D-9A10-3CB3103B524F}" Name="ucfCMAXMLClass" ProxyStubClassId="{00020424-0000-0000-C000-000000000046}" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
    </TypeLib>
  </File>
  <RegistryValue Root="HKCR" Key="Interface\{D41A9260-ED8A-44BC-8700-08D3ADB20CFE}\Forward" Value="{A98DFC45-F161-442D-9A10-3CB3103B524F}" Type="string" Action="write" />
</Component>

让我们说在修补过程中文件被更改&amp;注册更改的方式是注册表的KEY更改(原来是Interface \ {D41A9260-ED8A-44BC-8700-08D3ADB20CFE} \ Forward)

在修补程序期间会发生什么,以前的注册表将被删除或保持孤立状态。

我怀疑由于组件密钥(文件)已更新,这意味着该组件将安装并将保留以前的密钥(注册表) *我还没有测试过这个

1 个答案:

答案 0 :(得分:2)

正确。补丁实际上只是应用于MSI的转换,然后修复结果。由于转换将改变MSI,因此它不会知道旧的注册表键并保持不变。

您的补丁违反了组件规则:http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101,Windows Installer不支持。