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

时间:2012-02-27 17:09:51

标签: java launch4j

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

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

编辑以澄清:我正在专门研究如何制作相对于二进制文件本身的路径,如何使它们相对于当前工作目录。两者不一定相同。

5 个答案:

答案 0 :(得分:11)

您可以添加到launch4j配置

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

如果你需要更多,那么你可以像往常一样用semikolon隔开几条路径。

  

&LT;选择&GT;可选,接受您通常传递的所有内容   java / javaw launcher:断言选项,系统属性和X.   选项。在这里您可以映射环境和特殊变量EXEDIR   (exe的运行时目录),EXEFILE(exe的运行时完整文件路径)来   系统属性。必须用所有变量引用括起来   百分号和引用。

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

答案 1 :(得分:3)

设置-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选项列表中。这就是我在项目中所做的。

答案 2 :(得分:2)

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

<chdir>

可选。将当前目录更改为相对于可执行文件的任意路径。如果省略此属性或将其留空,则无效。

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

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

找到可执行文件的实际路径的代码将依赖于OS(readlink,GetModuleFileName等)。确保你真的测试目标操作系统..

答案 3 :(得分:1)

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

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

现在您要使用生成的启动器(launch.exe)启动app.jar。你的app加载了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

可以解析此String。但事实上,我认为应该有一个更好的解决方案来解决这个问题。

答案 4 :(得分:1)

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