2010-01-31 34 views
1

我有一个基本问题,我不明白,我们使用HEAT消耗工件的目录,其中一部分是COM DLL。 作为装箱的WXS文件的一部分我看到,存在用于注册表类似的元件:WIX自动化和补丁行为一旦注册DLL被更改

 
<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> 

比方说该补丁在文件被改变&登记以这样的方式改变该注册表的KEY改变(是最初Interface \ {D41A9260-ED8A-44BC-8700-08D3ADB20CFE} \ Forward)

修补程序中会发生什么情况将删除以前的注册表或将保持孤立状态。

我怀疑,既然组件键(文件)进行更新,这意味着该组件将安装和将离开前一个键(注册表) *我没有测试这个尚未

回答

2

正确的。修补程序实际上只是应用于MSI的转换,然后修复结果。由于转换将改变MSI,它不会知道旧的注册表项并且不会改变它们。

您的修补程序正在破坏组件规则:http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101并且Windows安装程序不支持此修补程序。

+0

所以这意味着每个注册表项目都应该在它自己的组件中......现在我明白为什么没有公司使用MSP – 2010-08-09 07:21:49

+0

注册表项很有趣。我通常建议将注册表项与他们在其中注册的文件(如COM注册)和注册表项相关联,这些注册表项与它们自己的组件中的任何内容都没有关联。较小的组件比较大的组件要好。 是的,修补是具有挑战性的。如果主要升级适合你,我建议。 :) – 2010-08-10 03:07:46