繁体   English   中英

使用launch4j时如何获取可执行文件的路径?

[英]How to get the path to the executable when using launch4j?

我正在使用 launch4j 在我的 Windows 应用程序中包装一个可执行的 jar 文件,但我需要通过 JVM 参数传递对其某些库的引用。 有问题的库驻留在应用程序安装目录中,并且始终位于相对于可执行文件的同一位置。

我想告诉 launch4j 在 JVM 选项中使用可执行文件相对路径。 我知道此信息在 Windows 批处理脚本级别可用,但是您如何配置 launch4j 以获取它?

编辑澄清:我正在寻找如何使路径相对于二进制文件本身,而不是如何使它们相对于当前工作目录。 两者不一定相同。

您可能会添加到您的 launch4j 配置

...
<jre>
...
<opt>-Djna.library.path="%EXEDIR%\\path\\to\\lib"</opt>
<opt>-Djava.library.path="%EXEDIR%\\path\\to\\lib"</opt>
...
</jre>
...

如果您需要更多,则可以像往常一样用分号分隔几条路径。

< opt> 可选,接受您通常会传递给 java/javaw 启动器的所有内容:断言选项、系统属性和 X 选项。 在这里,您可以将环境和特殊变量 EXEDIR(exe 的运行时目录)、EXEFILE(exe 的运行时完整文件路径)映射到系统属性。 所有变量引用都必须用百分号包围并引用。

来源: http : //launch4j.sourceforge.net/docs.html

设置-Djna.library.path=<relative path of native libraries> (如果使用 JNA)和-Djava.library.path=<relative path of native libraries>

或者,这可以在 Java 代码中完成: System.setProperty("jna.library.path","<relative path of native libraries>")System.setProperty("java.library.path","<relative path of native libraries>") 您可以附加尽可能多的路径来引用。 在 Windows 中,使用; 分隔路径。

此设置仅对 Java 应用程序的 JVM 运行时有影响(不像 Linux 中的LD_LIBRARY_PATH那样全局。)

或者,您可以将其放在JRE选项卡下的 Launch4J JVM 选项列表中。 这就是我在我的项目中所做的。

配置中的选项之一是允许将目录chdir更改为可执行文件目录。 这会将 user.dir 设置为与 exe 相同的目录,您可以使用它来查找其他应用程序路径。

<chdir>

可选的。 将当前目录更改为相对于可执行文件的任意路径。 如果您省略此属性或将其留空,则不会产生任何影响。

将其设置为 . 将当前目录更改为与可执行文件相同的目录。 .. 将其更改为父目录,依此类推。

<chdir>.</chdir>
<chdir>../somedir</chdir>

找到可执行文件实际路径的代码将取决于操作系统(readlink、GetModuleFileName 等)。 确保您真的在目标操作系统上进行测试。

如果我理解您的问题是正确的,那么您的安装目录中有一个 launch4j 可执行文件和一个本机库:

/launch.exe
/bin/lib.dll
/lib/app.jar

现在您要使用生成的启动器 (launch.exe) 启动 app.jar。 您的应用程序加载 lib.dll。

您可以将文件嵌入到您的 app.jar (marker.txt) 中。 现在您可以使用 ClassLoader

http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String )

getResource("marker.txt);

这会给你类似的东西:

file://c://installdir/lib/app.jar!marker.txt

这个字符串可以被解析。 但事实上,我认为这个问题应该有更好的解决方案。

您可以简单地在 Launch4j 的类路径选项卡中包含库所在的目录(例如 ..\\lib)。 至少这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM