代码之家  ›  专栏  ›  技术社区  ›  Dave Neeley

删除与WiX一起安装的GUID=“”组件

  •  5
  • Dave Neeley  · 技术社区  · 15 年前

    我不喜欢在不同的安装程序之间使用sharedll count甚至共享组件。

    我想我已经找到了我的WiX代码的一个特定版本。我做了几件蠢事。我(无意中)创建了一个Guid为空的非托管组件

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

    我怎样才能使我的安装程序恢复正常,并删除这些以前固定的组件?

    4 回复  |  直到 10 年前
        1
  •  5
  •   Stein Åsmul    6 年前

    Windows Installer实际上支持 . 它的意思是“安装但不注册组件”: http://msdn.microsoft.com/en-us/library/aa368007(VS.85).aspx

    我刚刚用WIX测试过,它似乎是一个空白的GUID条目(即没有自动生成的GUID)。还记得1:1的规则吗 指南 :

    • 如果更改绝对路径(例如重命名或移动文件),则应更改GUID。

    总之,GUID引用统计组件的安装密钥路径,而不是文件(该文件可能会移动),但随后该文件通过新GUID具有新标识(请考虑不同文件夹中具有相同名称的两个文件,它们是不同的文件,不同的标识)。

    您还可以重命名安装文件夹(理想情况下,这意味着所有组件guid也应该更改)。RemoveFile表概念可用于在安装和/或卸载时删除尚未注册为组件的文件(例如生成的文件)。


    更新 (2018年8月):只想补充一点,如果应用程序依赖于 LoadLibrary / LoadLibraryEx 或者任何类似的构造 硬代码

        2
  •  0
  •   Gabriel    15 年前

    更改组件的id并使用有效的GUID应该可以使事情正常进行。

        3
  •  0
  •   Philm    11 年前

    简单的回答是:

    当然,您必须添加一件事:在每次过度安装或卸载(“重新安装或修补或删除”)或主要升级之前删除所有文件。 您可以在自定义操作中执行此操作,即使使用CMD.exe/c RD/S/Q。。。。 (当然,自定义代码比这更优雅)

    如果你做得好,你可以设法有相当简单的设置没有所有的陷阱,微星通常有。 当然,如果一个文件一个文件地递归删除整个目录,这会更容易。

    我还没有尝试过,但我会:拥有没有GUID的“动态”组件和普通组件,然后提供补丁。从理论上讲,这应该是可行的,而且对于因补丁之间的文件集高度变化而导致的大量补丁问题,这将是一个很好的解决方法。

        4
  •  0
  •   Philm    11 年前

    1. 事实上,没有guid的组件是真正的“动态文件链接”方法,常常被一些工具或人员错误地称赞。

    其他“方式”: 在我看来,这不是动态的,因为如果你是动态的,你就做错了:

    2a。生成每次都是完全随机的guid =>错误算法

    2b。仅在第一次创建组件时生成guid,并对要打包到新组件中的新资源实现智能“差异”识别 =>唯一有效的文件树同步方法。但是你可以在这里做很多错事。。。

    推荐文章