0

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

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

我阅读了一些关于 MSI 源位置的帖子,如下所示:

为什么 MSI 需要原始 .msi 文件才能继续卸载?

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

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

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

我知道 Windows 安装程序会创建 MSI 的缓存版本,但它会删除所有文件,因此仍然只能进行简单的卸载。

4

1 回答 1

3

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

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

于 2013-09-05T13:05:12.620 回答