在我自己的安装程序中包含MSI文件:在哪里放置MSI?

时间:2013-09-05 10:28:33

标签: windows-installer nsis

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

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

我读了一些关于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 Installer会创建MSI的缓存版本,但是会删除所有文件,因此只能进行简单的卸载。

1 个答案:

答案 0 :(得分:3)

Windows / Windows Instaler的最新版本(我认为是Win7 / 8)不再剥离MSI以保留authenticode签名。此外,并非所有安装程序都需要卸载MSI。通常使用ResolveSource操作的编写不当的人会错误地执行此操作。

主要是将MSI放在非私有用户可以读取但不能修改它的位置。 [CommonAppDataFolder] \ Downloaded Installation \ Company \ Product \ Rev通常是Rev是PackageCode guid的好地方。