DLL 注册更改后的 WIX 自动化和修补行为

发布于 2024-08-19 15:25:04 字数 1459 浏览 2 评论 0原文

我有一个我不明白的基本问题,我们使用 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>

可以说,在修补过程中,文件发生了更改&注册的更改方式是注册表的 KEY 发生更改(最初是 Interface\{D41A9260-ED8A-44BC-8700-08D3ADB20CFE}\Forward),

在修补期间会发生什么情况,以前的注册表会被删除还是会保持孤立状态。

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

I have basic issue that i don't understand, we use HEAT to consume directory of artifacts that part of them are COM DLL.
As part of the crated WXS file i see that there are elements for registry like:

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

Lets say that during patch the file is changed & registration is change in such way that the KEY of the registry changed (was originally Interface\{D41A9260-ED8A-44BC-8700-08D3ADB20CFE}\Forward)

What will happen during patch will the previous registry be removed or will it stay orphaned.

I suspect that since the component key (file) is updated this means that the component will install and will leave the previous key (registry)
* i didn't test this yet

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅忆 2024-08-26 15:25:04

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

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

Correct. A patch is really just a transform applied to the MSI then the result is repaired. Since the transform will change the MSI, it won't know about the old registry keys and leave them untouched.

Your patch is breaking the Component Rules: http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101 and that is not supported by the Windows Installer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文