为啥使用 MSI 安装程序安装的应用程序会从 Windows 中消失

Posted

技术标签:

【中文标题】为啥使用 MSI 安装程序安装的应用程序会从 Windows 中消失【英文标题】:Why app installed using MSI installer would disappear from Windows为什么使用 MSI 安装程序安装的应用程序会从 Windows 中消失 【发布时间】:2019-09-18 23:39:01 【问题描述】:

我们最近对我们的Windows应用程序的安装和更新过程进行了一些更改,现在一些用户抱怨Windows有时会自动删除主应用程序.exe文件。

它通常发生在用户使用内置的网络更新功能更新应用程序之后。该功能是使用内置的.msi高级安装工具实现的。

我们正在努力找出导致此问题的原因,但尚未找到始终重现此问题的方法(尽管我们也看到了这种情况)。

以下是我们的安装和网络更新过程发生的变化:

我们应用程序的主安装程序现在是标准的 .msi,它成为 Windows 安装系统的一部分,并且可以通过 组策略本地管理和其他系统功能,例如 回滚 或版本。在没有此问题的先前版本中,我们的安装程序是使用 SetupBuilder 工具构建的.exe

我们在应用程序内引入了重新设计的网络更新程序功能(以在应用程序内更新到新版本)。它使用与安装的主要交付物相同的.msi.msi.exe 的形式从我们的服务器下载,然后提取 MSI 并启动它。 MSI 然后更新我们安装中的文件。这些.exe.msi 是使用高级安装工具 构建的,它为开发人员提供了这样的网络更新功能。在没有此问题的先前版本中,我们的网络更新功能是使用 SetupBuilder 工具 开发的,该工具提供了一个自定义网络更新文件 - .exe 网络更新程序,它可以下载许多包含补丁的网络更新文件到我们的应用程序。

过渡到标准 .msi 安装程序的目标是让我们的客户能够轻松地在组织中部署应用程序 - 例如,使用组策略和其他类似工具进行大规模部署。

有没有其他人遇到过这样的问题?关于如何排除故障并尝试重现的任何想法?

【问题讨论】:

这完全取决于安装程序。如果使用或制作不当,msi 安装程序可能会出现各种问题。特别是在升级的情况下。我建议您首先进行几次测试,手动升级旧版本并使用新版本,研究 msi 的日志并弄清楚发生了什么。 你是怎么做到的? 【参考方案1】:

理论:在做任何其他事情之前:The first thing I would ask the people who report the problem is if they have re-packaged your older, legacy (non-MSI) setup to be their own MSI file? 这可能会导致众所周知的升级问题,正如您所解释的那样(文件丢失)。请先检查。告诉他们卸载现有版本,然后安装新版本 - 这是最简单的方法。并不总是足够的(可能会出现一些晦涩难懂的问题)。

Mismatched component GUIDs 可能会在升级后导致文件丢失,文件版本降级场景 和其他各种技术细节也可能如此。您可以尝试安装到磁盘上的新默认位置以避免这些问题。这可以工作的原因是非常技术性的,很难简洁地解释。从本质上讲,您将自己与“过去的罪恶”脱钩。通常更改相关文件的名称就足够了:例如 MyApp.exeMyAppNew.exe 或者添加主要版本:MyApp5.exe ,但也许先尝试更改文件夹ProgramFiles\MyCompany\MyApp => ProgramFiles\MyCompany\MyApp5

如何配置升级?查看“升级”,选择什么:“Uninstall old version first and then install new version”或“Install new version first and then uninstall old version”。

博客条目::Why Windows Installer removes files during a major upgrade if they go backwards in version numbers(可能会有所帮助)。


部署调试:对于 MSI 和部署问题的开放式调试,显然需要收集情报,这意味着日志记录和系统检查。

日志记录:首先尝试为发生此问题的系统获取适当的日志文件。在 Advanced Installer 中,您可以在 Install Parameters 视图中勾选“启用详细日志记录”以启用详细日志记录对于所有软件包安装。这会将MsiLogging property 添加到已编译的 MSI 中,并且每次安装 MSI 都会导致在 TMP 文件夹中创建具有随机名称的 MSI 日志文件。查看文件夹,按日期排序,文件应位于顶部。 Suggest you do this and then tell the users to send you the log files when relevant. Maybe you have this setting enabled already?


更多日志记录:启用日志记录的方法有很多,您可以在此处找到说明:Enable installation logs for MSI installer without any command line arguments。 MsiLogging 属性只是一种可能性。

要记录单个 MSI 设置:http://www.installsite.org/pages/en/msifaq/a/1022.htm。 要为机器上的所有 MSI 操作启用全局日志记录:请参阅installsite.org 中的这个常见问题条目,"Globally for all setups on a machine" 部分 - 了解具体过程。 How to interpret an MSI Log File

【讨论】:

以上是关于为啥使用 MSI 安装程序安装的应用程序会从 Windows 中消失的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的安装程序正在搜索另一个不存在的 MSI?

msi安装程序完成后的应用程序进程以SYSTEM用户名启动,有时无法创建com对象

在 BizTalk 中,为啥要同时导入和安装 MSI 文件?

win7为啥安装不了VMware 8 破解版

使用 WiX 为 InstallShield 安装程序创建 msi 包装器

WiX 安装程序 msi 未安装使用 Visual Studio 2017 创建的 Winform 应用程序