在安装之前检测MSI是否需要重新启动

Gar*_*ley 5 windows installer windows-installer

如果我在安静模式下启动带有MSIExec的安装程序,我可以通过检查退出代码是否为3010来检测是否需要重新启动才能完成安装.但是我希望能够以可编程形式执行的操作是测试是否在启动实际安装程序之前,安装MSI需要重新启动才能完成.

我查看了MSI API:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa369426(v=vs.85).aspx

我确实认为我可以:

  1. 调用MsiOpenPackage以使安装程序准备好运行
  2. 使用以下命令调用MsiDoAction:CostInitialize,FileCost,CostFinalize,InstallValidate
  3. 从FilesInUse表中读取记录(MSDN上的以下文档建议在运行CostFinalize/InstallValidate之后创建此表:

http://msdn.microsoft.com/en-us/library/aa369546(VS.85).aspx

但是,当我在安装过程中查询它时,该表实际上并不存在.有没有其他方法可以检查是否需要重新启动?

Jir*_*ika 2

最终只有在安装过程中才会做出决定。如您所知,它取决于诸如 DLL 被并发运行的应用程序锁定之类的情况,因此它非常不稳定。

无法保证您在真正安装完成后不会收到退出代码 3010。

也就是说,退出代码与正在使用的文件的绑定并不紧密。它还可能表明无法停止服务或可能存在某种其他暂时或永久的情况。在您尝试之前,您无法得知服务是否可以停止。