【问题标题】:“no sigar-winnt.dll in java.library.path” error when using SIGAR使用 SIGAR 时出现“java.library.path 中没有 sigar-winnt.dll”错误
【发布时间】:2017-12-02 16:38:45
【问题描述】:

我对 java 很陌生。我正在开发一种工具来检查您的 PC 是否符合某些规格。这包括编写和执行一个单独的批处理文件,并包括一个用于 CPU 模型的 API (SIGAR)。

我的问题是,当我尝试在 Eclipse 中将其导出到 Runnable JAR 并从命令行运行生成的 JAR 时,它给了我很多“构建路径中未包含的 DLL”异常。在构建路径中包含包含 API DLL 的文件夹后,我遇到了类似的异常。修复它的方法是将包含 DLL 的文件夹添加到高级系统设置中的环境变量 (PATH)。

问题:

  1. JAR 现在可以在我的计算机上正常运行,但是下载 JAR 的用户呢?他们是否还需要将 DLL 添加到环境变量中?如果是这样,JAR 是否可以为他们做到这一点?

  2. 我的 JAR 不会通过双击运行,但会从命令行运行。有什么办法可以转移到下载 JAR 的用户身上?

  3. 如果用户下载了工具并且因为没有正确的 JRE 版本而无法运行,工具会通知他们吗?如果没有,是否有办法绕过用户必须更新 JRE 或将包装为 EXE 就足够了?

提前致谢,非常感谢。很多问题。

【问题讨论】:

    标签: java dll environment-variables executable-jar sigar


    【解决方案1】:

    Q1:JAR 现在可以在我的计算机上正常运行,但是用户呢? 谁下载JAR?他们是否还需要将 DLL 添加到 环境变量?如果是这样,JAR 有没有办法做到这一点 他们?

    您可以将 DLL 放入 JAR 文件中:

    但是,当您分发包含 DLL 的 JAR 时,您会遇到不同平台需要不同 DLL(或其他)的问题。即使在 Windows 上,您也存在 32 位与 64 位 DLL 的问题。

    Q2:我的 JAR 不会通过双击运行,而是通过命令运行 线。有没有办法解决这个问题,可以转移给那些 也下载 JAR?

    您无法在 JAR 文件中解决该问题。 “双击运行”功能由操作系统实现。提供此类功能的最佳方式是使用(特定于平台的)可双击的包装脚本。

    Q3:如果用户下载了该工具并且因为他们没有运行而无法运行它 拥有正确版本的 JRE,该工具会通知他们吗?如果不, 有没有办法解决用户必须更新 JRE 或将包装 一个EXE就够了吗?

    除非您安装了 JRE,否则 JAR 文件只是一个被动的数据块。 (实际上是一个 ZIP 文件)。

    如果用户的 JRE 太旧,那么 JRE 将无法加载 JAR 中的任何类(因为类文件版本号错误),或者由于缺少(系统)类而导致错误.

    唯一的希望是提供一个包装脚本来启动您的应用程序,在尝试启动 JAR 之前检查 JRE 版本。


    作为一般规则,如果您想做这样的花哨的事情,您需要在 安装程序 中分发您的程序,而不是作为一个裸 JAR 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      相关资源
      最近更新 更多