每个网络驱动器将一个可执行jar分发给用户。我想防止用户直接在网络上运行它,因为它会导致性能和其他问题。
一种解决方案是检查执行路径并将其与网络驱动器路径进行比较,但是如果事先不知道网络驱动器路径怎么办?还有其他可能性吗?
答案 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>:
命令以测试驱动器是否为共享驱动器。
另一种选择是实现批处理文件执行以下操作的逻辑:
net use ...
测试共享驱动器java
命令启动应用程序最后,拒绝在共享驱动器上运行可能是一个坏主意。用户可能有这样做的原因,而您并不知道。我建议提示用户,并为用户提供继续选择的选项。或类似的东西。
或者,在应用程序的安装说明中记录下,在共享驱动器(或等效驱动器)上安装JRE / JDK和应用程序是不可行的。
1-在共享驱动器上进行Java安装会比在共享驱动器上提供的应用程序JAR产生更糟糕甚至更糟糕的性能。