我有基本的问题,我不明白,我们使用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)
在修补程序期间会发生什么,以前的注册表将被删除或保持孤立状态。
我怀疑由于组件密钥(文件)已更新,这意味着该组件将安装并将保留以前的密钥(注册表) *我还没有测试过这个
答案 0 :(得分:2)
正确。补丁实际上只是应用于MSI的转换,然后修复结果。由于转换将改变MSI,因此它不会知道旧的注册表键并保持不变。
您的补丁违反了组件规则:http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101,Windows Installer不支持。