快速头脑风暴:1)您可以降级文件吗?2)您的组件 GUID 不匹配?3)您在不知不觉中删除了文件?(如果较旧的安装版本具有永久文件集,则可以工作)4)您缺少先决条件吗?5)自定义操作可以删除文件吗?6)病毒扫描程序可以隔离文件吗?
有边缘和边缘情况。现在我只能想到组件的传递条件(msidbComponentAttributesTransitive=> 组件条件在重新安装时重新评估可能会删除文件),但这不应该影响我认为的主要升级。
降级二进制:可能是降级二进制的问题。在升级设置中降级二进制文件(包括用较低版本的文件替换原始设置中的较高版本)可能会导致安装后文件丢失。尝试从添加/删除程序运行修复并再次启动应用程序。如果这解决了问题并且应用程序启动了,那么您很可能会遇到这个问题。我为此推荐的一个丑陋的修复方法是在 Visual Studio 中使用 File => Open as resource 将旧二进制文件的版本号更新为更高版本。还有其他方法,但出于务实的原因,我使用这种方法。
记录:还有其他几种可能性。您应该做的第一件事是制作一个正确的日志文件:
msiexec.exe /i C:\Path\Your.msi /L*v C:\Your.log
然后查找以下条目:
MSI (s) (0C:5C) [16:13:25:890]: Disallowing installation of component: {015A4DC1-56F4-562B-96B5-B3BE0D45FA5F} since the same component with higher versioned keyfile exists
MSI (s) (0C:5C) [16:13:25:890]: Disallowing installation of component: {4B6A1404-3892-5BEF-AB47-8FE3149211A4} since the same component with higher versioned keyfile exists
请参阅Rob Mensching 本人的这个旧答案。这里有更多来自 Chris Painter 的内容。
记录方法:这是关于MSI 记录的答案。我会的enable the global logging policy so all MSI operations create a log file in the TEMP folder。
组件 GUID 不匹配:您应该在设置之间保持组件 GUID 稳定,除非您将文件移动到另一个位置(在源媒体中 - 换句话说,安装到不同的绝对目标路径)。如果您对 RemoveExistingProducts 操作进行排序以延迟运行,您的组件引用错误可能会导致文件在重大升级后丢失,因为在这种情况下设置会强制执行组件规则(早期排序这些规则可能会被弯曲)。