【问题标题】:Launching jarsigner.exe on windows os which jdk/jre not installed by installer在安装程序未安装 jdk/jre 的 Windows 操作系统上启动 jarsigner.exe
【发布时间】:2012-06-12 07:02:02
【问题描述】:

我已将 jre 文件嵌入到我的应用程序设置中,我可以使用 java.exe 来执行一些特定于 java 的任务。

我想使用 jarsigner.exe,但是当我启动 jarsigner 时,它会检查一些注册表项,但找不到(因为 jre 安装程序没有安装 jre)并给出错误。

如何指定 jarsigner 的 java.exe 路径

所以它应该使用我指向的 java.exe 而不是检查注册表。

错误日志:

打开注册表项“Software\JavaSoft\Java Runtime Environment”时出错

错误:找不到 java.dll

错误:找不到 Java SE 运行时环境

我想知道 jarsigner 是否有任何额外的参数可以定义 JAVA_HOME 目录,或者任何其他定义 java.exe 所在位置的参数。

【问题讨论】:

  • “我已将 jre 文件嵌入到我的应用程序设置中”。显然,您需要将一些 JDK 文件嵌入到您的应用程序设置中,并且显然您应该使用 JDK 自己的安装程序来执行此操作。
  • @EJP:是的,我实际上在应用程序设置中添加了一些 jdk 文件(jli.dll、msvcr71.dll 和带有 jarsiger.exe 的 tools.jar),这些在安装了 jre 的系统上工作正常但未安装 jdk。

标签: java jarsigner


【解决方案1】:

没有特定的命令行参数,但是在调用 jarsigner 时,您仍然可以将 java.home 属性设置为指向与您的应用程序捆绑的所需 JRE。

例如,您可以使用以下任一方法调用 jarsigner

  • ProcessBuilder 并设置 java.home 属性,
  • Runtime.exec() 的变体,允许设置envp 环境变量,
  • 或批处理/shell 脚本并在其中设置JAVA_HOME 属性。

【讨论】:

  • 感谢您的回答。我使用 C++ 来调用 jarsigner.exe。我尝试处理批处理文件,但遇到了同样的错误。
  • 批处理文件内容:set JAVA_HOME="C:\jre6\" jarsigner.exe pause
【解决方案2】:

让 jarsigner 使用 JRE 而不是 JDK。需要将这些文件从 JDK 打包到 JRE 中

从 \bin\jarsigner.exe 到 \bin\jarsigner.exe 从 \bin\msvcr100.dll 到 \bin\msvcr100.dll 从 \bin\jli.dll 到 \bin\jli.dll 从 \lib\tool.jar 到 \lib\tool.jar 我对此进行了测试,发现它对我有用。

【讨论】:

  • 我只需要 \bin\jarsigner.exe 和 \lib\tool.jar。确保这些来自与安装的 JRE 相同版本的 SDK,否则会出现版本错误。
【解决方案3】:

盗自Java Error opening registry key

删除(如果有)。

在 32 位机器上

Windows\System32 文件夹中的 java.exe、javaw.exe 和 javaws.exe

在 64 位机器上

从 Windows\SysWOW64 中删除。

【讨论】:

  • 我无法做到是否会安装 jre/jdk。我想从我的 jarsigner.exe 中使用我提供的 jre。
猜你喜欢
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 2011-05-02
相关资源
最近更新 更多