在启动安装程序之前检查Windows更新或任何安装程序实例是否正在运行(java)

时间:2012-02-03 08:53:29

标签: java installer windows-installer

如果事先正在运行任何其他安装,请在开始安装之前检查我的安装程序。就像我想检查Windows更新或任何其他安装程序是否正在运行我不会启动我的安装程序。

我打算先检查一下msiexec实例是否正在运行。有没有更好的方法,并且检查Windows更新将是相同的。仅供参考我的安装程序是在java中

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

由于您的安装程序是Java,我认为没有理由检查其他安装程序是否正在运行,而且没有可行的方法。

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

在没有其他安装程序运行的情况下过于关心。这就是使用专门的安装工具更明智的原因。

答案 2 :(得分:1)

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

<强> HKLM \ SOFTWARE \微软\的Windows \ CurrentVersion \安装\ INPROGRESS

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

在这里您可以找到有关InstallUISequence和InstallExecuteSequence的更多信息: http://msdn.microsoft.com/en-us/library/windows/desktop/aa372404(v=vs.85).aspx

答案 3 :(得分:0)

感谢大家的建议,我最终决定创建一个Windows native dll来检查WindowsInstaller的状态。如果返回的SERVICE_STATUS_PROCESS结构的dwControlsAccepted成员的值为SERVICE_ACCEPT_SHUTDOWN,则Windows Installer服务当前正在运行。然后使用JNI从我的java类中调用它。