java - 在退出 java 之前运行外部程序有时会失败
问题描述
我有一个 java 程序,在 Windows XP 上通过 10 个系统运行,它在退出之前调用一个程序 (Mover.exe)。我想要发生的是在 java 程序退出后 Mover.exe 应该用下载的文件覆盖并更新 java 程序。
我new ProcessBuilder(progname, options).directory(tempDir).start();
用来调用 Mover.exe 但它只是间歇性地工作。
当然,有些运行该程序的系统启用了 UAC,有些则没有,而且似乎是 UAC 系统造成了麻烦。我不知道这是提升请求的延迟还是时间/文件锁定的问题。
有没有人尝试过使用 java 创建自己的更新程序,或者看过关于处理这些类型问题的好指南?
解决方案
前段时间我通过生成.cmd
批处理来解决类似的问题,该批处理等待几秒钟然后运行该工具(Mover.exe
在您的情况下)。
更漂亮的解决方案是,拥有一个“启动器”应用程序,它只是
- 启动您的应用程序,
Mover.exe
如果以某种方式发出信号(如特殊的 exitCode),则运行,- (几乎)永远不需要自己更新
然后您必须确保您的应用程序仅通过此启动器启动。
推荐阅读
- vsto - 如何配置标签。VSTO word 插件中的图标和 URL
- python-3.x - 如何检查我们代码的空间复杂度是否为 O(1)
- javascript - 如何让多个 .js 文件工作(只有第一个 .js 文件工作)
- python - PyTorch Sampler:如果指定,下一次迭代采样相同的子集还是另一个子集?
- github-actions - 如何将 Windows 路径转换为 UNIX 路径
- python - 在 python 3 中为大型数据集查找阈值内的点的最有效方法是什么?
- python - 最后一个字符缺少python
- laravel - Laravel Spatie 权限不会将未经授权的用户重定向到登录页面
- java - 我在 curl 请求中从 spring 过滤器中得到 null
- asp.net - ASP.NET 单元测试:存在同名数据库,或无法打开指定文件