如何在父msi下运行一个.msi,它会抛出错误“另一个安装正在进行中...”

时间:2010-06-24 09:41:13

标签: c# .net windows-installer

我创建了带有嵌入式资源的自定义动作dll文件作为SQL Server Compact Edition msi ...此dll在安装项目中被指定为自定义操作..但是当我运行setup msi时,它会抛出错误,说另一个安装是正在进行中...我在代码中尝试了process.waitforExit(3000)选项,但仍无法找到解决方案? 请回复

4 个答案:

答案 0 :(得分:2)

基本上有两种方法可以将依赖项包含在您的安装中。通过在msi文件之前运行的引导程序或作为合并模块运行。由于这是微软产品,我怀疑它是否可用作合并模块。

换句话说,您应该在应用程序中使用引导程序。试试dotNetInstaller

答案 1 :(得分:1)

另一个选项是MSI chaining,虽然直到MSI 4.5才引入,并且要求目标系统安装MSI 4.5或更高版本。目前,只有Windows 7具有本机支持,但旧版本的Windows有4.5个可再发行组件。最后,请注意,使用4.5可再发行组件更新MSI通常需要重新启动。

答案 2 :(得分:0)

MSI强制执行两个互斥锁。 1)每台机器一个执行序列和2)每个进程一个UI序列。虽然在技术上可以忽略最佳实践并从第一个用户界面调用你的第二个MSI,但你将失去安静安装的能力,而一些不好的客户会在某一天失望。

要么投资引导程序/引导程序,要么另一种可能性是SQL Server Compact版本非常小,它们也支持私有部署模型,您只需在应用程序目录中部署程序集即可。这种方法的问题是,如果Microsoft为这些程序集提供安全更新,那么它们将无法为它们提供服务。您将不得不重建和部署您的产品。

答案 3 :(得分:-1)

您需要支持静默安装吗?我的回忆是,在进入执行序列之前,您的安装不会获取安装程序服务的锁定。这意味着您可以在UI序列中的某个位置启动SQL Server安装。