防止jar在网络驱动器上运行

时间:2019-05-16 10:28:34

标签: java jar executable-jar

每个网络驱动器将一个可执行jar分发给用户。我想防止用户直接在网络上运行它,因为它会导致性能和其他问题。

一种解决方案是检查执行路径并将其与网络驱动器路径进行比较,但是如果事先不知道网络驱动器路径怎么办?还有其他可能性吗?

1 个答案:

答案 0 :(得分:1)

我不认为您可以在纯Java中做到这一点。我很确定您将需要运行外部命令或调用本机代码来检测JAR文件是否在网络共享上。

您需要做的第一部分是获取JAR文件的绝对路径:

Class mainClass = MyMainClass.class;
File jarFile = new File(mainClass.getProtectionDomain()
                                 .getCodeSource()
                                 .getLocation()
                                 .toURI());

我在github上找到了由亚伦·迪古拉(Aaron Digulla)撰写的“要点”,该任务完成了第二部分任务:

Aaron的代码采用Windows绝对路径,提取驱动器号,然后运行Windows net use <drive-letter>:命令以测试驱动器是否为共享驱动器。


另一种选择是实现批处理文件执行以下操作的逻辑:

  • 提取JAR文件的驱动器名称
  • 使用net use ...测试共享驱动器
  • 使用相同的技术来检查Java安装是否不在共享驱动器上 1
  • 使用java命令启动应用程序

最后,拒绝在共享驱动器上运行可能是一个坏主意。用户可能有这样做的原因,而您并不知道。我建议提示用户,并为用户提供继续选择的选项。或类似的东西。

或者,在应用程序的安装说明中记录下,在共享驱动器(或等效驱动器)上安装JRE / JDK和应用程序是不可行的


1-在共享驱动器上进行Java安装会比在共享驱动器上提供的应用程序JAR产生更糟糕甚至更糟糕的性能。