首页 > 解决方案 > 在退出 java 之前运行外部程序有时会失败

问题描述

我有一个 java 程序,在 Windows XP 上通过 10 个系统运行,它在退出之前调用一个程序 (Mover.exe)。我想要发生的是在 java 程序退出后 Mover.exe 应该用下载的文件覆盖并更新 java 程序。

new ProcessBuilder(progname, options).directory(tempDir).start(); 用来调用 Mover.exe 但它只是间歇性地工作。

当然,有些运行该程序的系统启用了 UAC,有些则没有,而且似乎是 UAC 系统造成了麻烦。我不知道这是提升请求的延迟还是时间/文件锁定的问题。

有没有人尝试过使用 java 创建自己的更新程序,或者看过关于处理这些类型问题的好指南?

标签: javawindowsuac

解决方案


前段时间我通过生成.cmd批处理来解决类似的问题,该批处理等待几秒钟然后运行该工具(Mover.exe在您的情况下)。

更漂亮的解决方案是,拥有一个“启动器”应用程序,它只是

  • 启动您的应用程序,
  • Mover.exe如果以某种方式发出信号(如特殊的 exitCode),则运行,
  • (几乎)永远不需要自己更新

然后您必须确保您的应用程序仅通过此启动器启动。


推荐阅读