gpt4 book ai didi

java - 使用 Java 运行时添加注册表项,导致进程 reg.exe 永远运行

转载 作者:可可西里 更新时间:2023-11-01 11:21:32 27 4
gpt4 key购买 nike

我有这段代码可以将可执行文件插入到启动注册表中:

private static void addToWin( File f, String param ) throws IOException {
String name = generateName(f);
String cmd = "reg add HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v " + name + " /t REG_SZ /d \"" + f.getAbsolutePath() + param + "\"";
Runtime.getRuntime().exec(cmd);
}

这有效,但问题是在运行它之后我在任务管理器中有一个名为 reg.exe 的进程占用了 10% 的 CPU。这可以防止 JVM 在运行结束时关闭(即使在结束时使用 System.exit())

从注册表中删除相同条目的代码运行良好,没有这个问题。

您知道发生了什么以及如何解决这个问题吗?

谢谢

最佳答案

我似乎记得有过类似的问题,发现进程在其输出被消耗之前不会终止。尝试保留对运行时 exec 方法返回的 Process 对象的引用,就像这样......

Process proc = Runtime.getRuntime().exec(cmd);

...然后从流程中获取输入流并简单地从中读取直到结束。

InputStream ips = proc.getInputStream();
while(ips.read() != -1) {}

需要添加错误处理。您可能必须对 stderr 执行相同的操作,而不仅仅是 stdout。

编辑:哦,当然不要忘记关闭流。似乎是那种占用系统资源的东西。

关于java - 使用 Java 运行时添加注册表项,导致进程 reg.exe 永远运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8136381/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com