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

Windows installer 在我自己的安装程序中包含MSI文件:将MSI放在哪里?,windows-installer,nsis,Windows Installer,Nsis,我正在开发一个安装程序(用NSIS脚本编写),我想包括一个第三方MSI文件,这是我的应用程序的先决条件 使用msiexec.exe/i somelibrary.MSI安装MSI文件非常容易,但这只能在第一次正常工作。我发现这与Windows Installer保存在注册表中的源位置有关 我读了一些关于MSI源位置的帖子,如下所示: 问题是:我应该将原始的SomeLibrary.msi文件放在哪里,以便保留它以备将来进行修复或重新安装操作? 如果我将文件放在我的应用程序目标位置(例如,在C:\P

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

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

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

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

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

尝试在另一个目录中重新安装会导致
在尝试读取文件C:\Program Files\…\SomeLibrary.msi时发生网络错误,这是可以理解的,因为原始源msi文件已在卸载过程中删除


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

最新版本的Windows/Windows Instaler(我想是Win7/8)不再删除MSI以保留验证码签名。此外,并非所有安装程序都需要卸载其MSI。通常情况下,错误地使用ResolveSource操作的代码编写得很糟糕


主要的事情是把MSI放在一个非priv用户可以读取但不能修改的位置。[CommonAppDataFolder]\Downloaded Installation\Company\Product\Rev通常是一个很好的地方,Rev是一个PackageCode guid。

最新版本的Windows/Windows Installer(我想是Win7/8)不再剥离MSI以保留验证码签名。此外,并非所有安装程序都需要卸载其MSI。通常情况下,错误地使用ResolveSource操作的代码编写得很糟糕

主要的事情是把MSI放在一个非priv用户可以读取但不能修改的位置。[CommonAppDataFolder]\Downloaded Installation\Company\Product\Rev通常是一个很好的位置,其中Rev是PackageCode guid