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



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

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

我认为您不能在纯Java中执行此操作。我敢肯定,您需要运行外部命令或拨打本机代码以检测JAR文件是否在网络共享上。

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

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

我在Aaron Digulla撰写的GitHub上找到了一个"要点",该任务的其余部分:

  • https://gist.github.com/digulla/31EED31C7EAD29FFC7A30AAF87131DEF

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


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

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

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

另外,在应用程序的安装指令中的文档中,安装JRE/JDK和应用程序在共享驱动器(或等效(上安装应用程序。


1-共享驱动器上的Java安装会比共享驱动器上的应用程序JAR的性能更糟糕。

相关内容

最新更新