【发布时间】:2018-01-06 20:28:44
【问题描述】:
当我启动任何第三方应用程序时,例如记事本(但您可以使用其他任何内容),从 Java 9 应用程序中退出,然后退出 Java 应用程序:
import java.io.*;
public class LaunchNotepad {
public static void main(String[] args) throws IOException {
Runtime.getRuntime().exec(new String[] {"C:\\Windows\\notepad.exe"});
}
}
启动的第三方应用程序一直锁定 Java 9 的 lib\modules 文件。这使得我们的具有私有 JRE 的 Java 应用程序很难自行更新,因为无法重命名原始目录(包含 JRE)。这是来自 ProcessExplorer (Sysinternals) 的屏幕截图:
这闻起来像 Java 9 错误(报告为 JDK-8194734),但是否有解决方法可以在不锁定 lib\modules 文件的情况下在 Windows 上启动应用程序,例如通过使用将传递的参数作为应用程序简单地启动的外部(代理)应用程序?
【问题讨论】:
-
lib/modules 文件的句柄不应该被继承到子进程中。如果您确定发生这种情况,请提交错误。
-
我已经提交了一个错误,但我不知道 Oracle 需要多长时间来修复它。我需要一个快速的解决方法,即使它很脏。我有点沮丧,人们搁置这个问题,因为这并不能解决任何问题。
-
你试过
Runtime.getRuntime().exec(new String[] {"cmd", "/c", "start", "C:\\Windows\\notepad.exe"});吗?这样,锁定 lib/modules 的cmd进程将立即退出,只留下记事本运行。 -
什么是
c:\temp\java-test文件? -
问题已更新,屏幕截图显示 Notepad.exe 继承了 jimage 文件的句柄。现在在 JDK JIRA 中对此进行了跟踪:bugs.openjdk.java.net/browse/JDK-8194734