使用Windows安装程序了解GUIDS,更新和修补程序

Dav*_*son 9 windows-installer guid wix msi-patch

我正在学习Windows-Installer和Wix,并且有很多与它如何工作有关的问题:

  1. 如果组件GUID发生更改,但组件中的文件相同,那么主要升级会发生什么?这些文件被替换了吗?
  2. 如果从产品中删除组件,主要升级中的关联文件会发生什么?卸载时是否删除原始文件?
  3. 我是否正确地说,主要升级将替换所有组件中的所有文件,无论文件的程序集版本是否已更改,以及在小更新和次要升级时,如果GUID相同,它仅替换文件,并且文件的汇编版本已递增?如果文件没有汇编版本,如aspx页面怎么办?
  4. 假设在不使用安装程序的情况下将产品部署在计算机上.如果您随后创建了一个安装程序,组件中的文件名与安装目录中的名称相同,那么如果您尝试安装,这些文件会发生什么?它们被取代了吗?
  5. 我是否正确地说,如果我使用像热一样的工具来创建包含目录中所有文件的xml文件(比如网站),那么你必须保持GUID相同(手动或使用脚本) ,或者你只能进行重大升级?

Wim*_*nen 4

如果组件 GUID 发生更改,但组件中存在相同的文件,那么重大升级时会发生什么情况?

首先,问题是旧组件是否被卸载。如果您没有将升级配置为卸载产品的早期版本,则该组件将不会被删除(尽管其文件可能会被覆盖)。另请参阅问题 2 的回答。

其次,问题是是否会安装新组件。仅当组件的键路径丢失时才会安装该组件。如果密钥路径是版本文件,则较低版本也算作“丢失”。

最后,如果新组件被标记为安装,并且 Windows Installer 遇到与其尝试安装的文件同名的文件,则文件版本控制规则将确定是否替换该文件。例如,版本较高的文件不会降级。

如果从产品中删除某个组件,重大升级时相关文件会发生什么情况?卸载时原始文件会被删除吗?

除非您将正确的条目放入升级表和告诉 Windows 安装程序删除旧产品的 InstallExecuteSequence 中,否则旧组件将被保留。请参阅 Alex Shevchuk 的这篇博客文章,了解如何在 wix 中创建删除旧版本的安装程序的指南。

我是否正确地说,重大升级将替换所有组件中的所有文件......

否。这取决于是否先删除旧组件、是否根据密钥路径安装新组件以及文件版本控制规则。

假设在不使用安装程序的情况下将产品部署到计算机上。如果您随后创建了一个安装程序,其中组件中的文件与已安装目录中的文件同名,那么如果您尝试安装,这些文件会发生什么情况?

同样,这取决于组件是否安装,取决于它们的密钥路径和文件版本控制规则。

我是否正确地说,如果我使用 heat 这样的工具来创建一个包含目录中所有文件的 xml 文件(例如网站),那么您必须保持 GUID 相同(手动或使用脚本) ,或者你只能进行重大升级?

正确的。GUID 是组件的标识,因此如果您更改 GUID,则会存在两个组件(在产品的旧版本和新版本中)将相同的资源安装到相同的目标位置。根据 MSDN 的说法,这是一个禁忌:“永远不要创建两个以相同名称和目标位置安装资源的组件。”