我正在开发一个安装程序(用NSIS脚本编写),我想包含一个第三方MSI文件,这是我的应用程序的先决条件。

使用msiexec.exe /i somelibrary.msi安装MSI文件非常容易,但这只在第一次才能正确工作。我发现这与Windows安装程序保存在注册表中的源位置有关。

我读到了一些关于MSI源位置的文章,如下所示:

Why does MSI require the original .msi file to proceed with an uninstall?

问题是:我应该将原始的SomeLibrary.msi 文件放在哪里,以便为以后的修复或重新安装操作保留?

如果我将文件放在我的应用程序目标位置(例如在C:\Program Files\...中),它将被我的应用程序卸载程序删除。

然后,在另一个目录中重新安装会导致A network error occurred while attempting to read from the file C:\Program Files\...\SomeLibrary.msi,这是可以理解的,因为在卸载过程中删除了原始源MSI文件。

据我所知,Windows会创建MSI的缓存版本,但这将从所有文件中删除,因此仍然只能进行简单的卸载。