gpt4 book ai didi

wix - 删除随 WiX 安装的 GUID =""组件

转载 作者:行者123 更新时间:2023-12-04 19:23:41 26 4
gpt4 key购买 nike

我在多台服务器上弄乱了我的基于 WiX 的安装程序,以便它在卸载过程中不再删除文件或组件(甚至其他功能)。 MSI 日志显示所有不会卸载的组件上的 PreviouslyPinned=1。

我没有任何幻想,比如在不同的安装程序之间使用 SharedDll 计数甚至共享组件。

我想我已经将其追溯到我的 WiX 代码的特定修订版。我做了几件蠢事。我(无意)创建了一个带有空白 Guid 的非托管组件

<Component Id="file.ext" Guid="">
<File .../>
<Component>

我还更改了另一个组件的文件位置和 Id(但不是 Guid)。早期版本中存在的所有组件都显示 PreviouslyPinned=1 并且不会卸载,并且在此版本之后添加的新组件正确安装/卸载。

如何让我的安装程序恢复正常并删除这些以前固定的组件?

最佳答案

Windows Installer 实际上支持 的概念。空白 GUID .意思是“安装,但不注册组件”:http://msdn.microsoft.com/en-us/library/aa368007(VS.85).aspx (ComponentId 条目解释了空 GUID 会发生什么)。

我刚刚用 WIX 进行了测试,它似乎尊重空白的 GUID 条目(即没有自动生成的 GUID)。记住 之间的 1:1 规则绝对路径/关键路径用户名 :

  • 如果更改 GUID,则应为组件键路径使用新的绝对路径。
  • 如果您更改绝对路径(例如通过重命名文件或移动它),您应该更改 GUID。

  • 总之,GUID 引用计数组件的安装 key 路径,而不是文件 - 可能会移动,但是文件通过新的 GUID 具有新的身份(想想不同文件夹中的两个同名文件 - 它们是不同的文件,不同的身份)。

    清理困惑的 GUID 引用计数可能有点困惑。我发现如果我可以更改文件名,可以有效地消除问题。我还生成了一个新的 guid,因此断开了旧 guid 引用计数的链接。 您还可以重命名安装文件夹(理想情况下,这意味着所有组件 GUID 也应更改)。 RemoveFile 表概念可用于在安装和/或卸载时删除尚未注册为组件的文件(例如生成的文件)。

    更新 (2018 年 8 月):只想补充一点,如果您的应用程序依赖于 LoadLibrary,您应该小心重命名 dll 或 exe 文件。/ LoadLibraryEx或任何类似的结构,“ 硬编码 ”文件名 - 要加载 - 在源代码深处。

    关于wix - 删除随 WiX 安装的 GUID =""组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567415/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com