在启动我的安装程序(java)之前,检查windows update或任何安装程序Instance是否正在运行

在启动我的安装程序(java)之前,检查windows update或任何安装程序Instance是否正在运行,java,installation,windows-installer,Java,Installation,Windows Installer,如果之前正在运行任何其他安装,请在开始安装之前检查我的安装程序。就像我想检查windows update或任何其他安装程序是否正在运行一样,我不会启动我的安装程序 我计划检查是否有任何msiexec实例正在运行。是否有更好的方法,检查windows update是否也一样。仅供参考,我的安装程序是java的您应该知道,安装完成后,msiexec.exe仍将运行几分钟。这是操作系统中的默认行为,它使进程保持活动状态几分钟,以防用户启动另一个安装,从而节省重新启动的时间。因此,检查流程可能会得到不正

如果之前正在运行任何其他安装,请在开始安装之前检查我的安装程序。就像我想检查windows update或任何其他安装程序是否正在运行一样,我不会启动我的安装程序


我计划检查是否有任何msiexec实例正在运行。是否有更好的方法,检查windows update是否也一样。仅供参考,我的安装程序是java的

您应该知道,安装完成后,msiexec.exe仍将运行几分钟。这是操作系统中的默认行为,它使进程保持活动状态几分钟,以防用户启动另一个安装,从而节省重新启动的时间。因此,检查流程可能会得到不正确的数据


另外,如果您的安装程序是用Java编写的,您能解释一下为什么需要检查msiexec.exe进程吗?

由于您的安装程序是用Java编写的,我看不出有任何理由检查其他安装程序是否正在运行,而且也没有可靠的方法可以这样做

您的安装程序是否尝试替换系统文件?不应该这样做。
安装程序是否尝试更新正在使用的文件?它必须优雅地做这件事。并要求用户关闭有问题的应用程序;如果不可能或用户不想立即关闭应用程序,则安装程序会要求用户在完成安装后重新启动系统


在没有其他安装程序运行的情况下,需要太多关注。这就是为什么使用专门的安装工具更明智的原因。

要检查操作系统中正在进行的安装,可以使用以下注册表项:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\InProgress

请注意,Windows Installer不允许同时执行多个InstallExecuteSequence,但是您可以从不同的软件包启动多个安装UI。软件包通常在您按下“安装”并授予启动系统更改(创建注册表、复制文件等)的所有权限时进入InstallExecuteSequence

在这里,您可以找到有关InstallUISequence和InstallExecuteSequence的更多信息:
谢谢大家的建议,我最终决定创建一个windows本机dll来检查WindowsInstaller的状态。如果返回的服务\u STATUS\u进程结构的dwControlsAccepted成员的值为service\u ACCEPT\u SHUTDOWN,则Windows Installer服务当前正在运行。然后使用JNI从我的java类中调用它。

如果用户在检查显示msiexec未运行后立即启动它会怎么样?因为它将在稍后阶段安装msi列表,此时安装失败并不好。那么您建议的方法是什么?您指定的密钥不存在。