【问题标题】:Java standalone application and dll access / updateJava 独立应用程序和 dll 访问/更新
【发布时间】:2018-03-06 09:18:39
【问题描述】:

我正在开发一个使用(单个)dll 的简单独立 Java 应用程序。到目前为止,一切都很好。问题是这个 dll 的旧版本已经存在于大多数用户的 PC 中(c:\windows\myDLL.dll,所以它在 PATH 中)。

我希望应用程序能够使用自己的 dll,即位于其“lib”目录中的较新版本。

有什么想法吗?我什至认为我可以交换 dll(如果应用程序在 c:\windows 中找到旧版本,那么它可以覆盖它)但它(显然)被应用程序本身锁定,在加载时可能会在 PATH 中打开 dll .. .

【问题讨论】:

    标签: java dll


    【解决方案1】:

    我注意到您在 .war 文件中部署了 DLL。在这种情况下,您需要从 .war 文件中提取它(在应用程序启动时),将其写入某处,然后通过 System.load() 引用绝对路径。详情请见this answer

    【讨论】:

    • 使用 NetBeans,我在 properties/run 部分定义了 -Djava.library.path,但我没有得到任何结果,可能是因为我不知道如何让应用程序查看它的 .war 文件。 ..
    • 如果您将 DLL in 部署到 war 文件中,您必须在运行时提取它,将其保存在某个位置(例如 c:\temp 目录),然后引用它从那里。您不能使用 java.library.path 来引用 inin jar 文件
    • 好的,谢谢。假设我不会将 dll 部署在 .war 文件中,而是部署在 /lib 目录中,该目录位于主应用程序的目录中。我可以使用 System.load() 来加载它吗?我应该使用“currentDir/lib/myDLL.dll”之类的东西吗?
    • 我试过 System.load(myDLL.dll) 但它说它无法在 32 位环境中加载 64 位 dll 失败(对于这个特定的应用程序,我使用的是 32 位环境)...很奇怪:如果我手动覆盖 Windows 目录中的 dll,应用程序会毫无问题地使用它。所以我试图删除旧文件并复制新文件,但这是不可能的:可能应用程序没有任何权限删除 c:\windows 目录中的 .dll 文件...
    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多