首页 > 解决方案 > 防止 jar 在网络驱动器上运行

问题描述

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

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

标签: javajarexecutable-jar

解决方案


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

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

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

我在 Aaron Digulla 写的 github 上找到了一个“要点”,它完成了剩下的第二个任务:

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


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

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

最后,拒绝在共享驱动器上运行可能是个坏主意。用户可能有你不知道的理由这样做。我建议提示用户并让用户选择继续。或类似的东西。

或者,在应用程序的安装说明中记录建议将 JRE / JDK 和应用程序安装在共享驱动器(或同等驱动器)上。


1 - 共享驱动器上的 Java 安装将提供与共享驱动器上的应用程序 JAR 一样糟糕的性能,如果不是更差的话。


推荐阅读