如何检测、防止和修复java windows注册表损坏(即“找不到java.dll”)

如何检测、防止和修复java windows注册表损坏(即“找不到java.dll”),java,registry,Java,Registry,问题:java.exe抱怨dll 我们使用一个工具将java.exe复制并重命名为临时目录,即/path/to/some/dir/java\u foo\u application.exe。[该工具是“另一个Java服务包装器”或YAJSW。它复制并重命名,以便在windows任务管理器中显示有意义的名称] 在某些计算机上,windows注册表中损坏的java条目在运行复制的java.exe时会出现以下错误: Error opening registry key 'Software\JavaSof

问题:java.exe抱怨dll

我们使用一个工具将java.exe复制并重命名为临时目录,即/path/to/some/dir/java\u foo\u application.exe。[该工具是“另一个Java服务包装器”或YAJSW。它复制并重命名,以便在windows任务管理器中显示有意义的名称]

在某些计算机上,windows注册表中损坏的java条目在运行复制的java.exe时会出现以下错误:

Error opening registry key 'Software\JavaSoft\Java Runtime Environment'
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.
以前解决过一次:卸载并重新安装

我以前曾经遇到过这个问题:nd通过卸载所有jdk(使用windows“添加-删除程序”)并重新安装较新版本的java解决了这个问题

请注意,其中一个jdk不会卸载。我不得不从微软下载特殊的注册表清理器来强制卸载

我的问题:检测和预防?

  • 如何提前判断系统是否有损坏的java注册表项
  • 未来如何防止这种腐败
  • 除了卸载和重新安装jdk之外,还有其他方法可以解决这个问题吗

谢谢。

您可以使用一个可执行的包装器来启动应用程序,而不是乱搞javaw。请参阅示例或。

要了解真正的问题,请下载两个jar文件:

记住设置: wrapper.console.pipestreams=true

如第页所述

包装器日志文件向我显示以下跟踪:

-设置状态重新启动\u开始->运行

-注册表项“Software\JavaSoft\Java运行时环境\CurrentVersion” 具有值“1.5”,但需要“1.6”

-错误:找不到java.dll

-错误:找不到Java 2运行时环境。 进程终止 控制器状态:正在等待->进程\u已终止

我解决了重新安装系统JRE 1.6的问题。


致以最良好的祝愿

澄清一下:我们不使用javaw。我们正在使用一个java服务包装器来包装应用程序周围的windows服务。exe4j和JSmooth能够包装windows服务。此外,exe4j还提供了一种在系统上定位JRE的启发式方法,因此,如果注册表被破坏,它仍然可以在已知位置或基于环境变量找到运行时。