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

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

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


拉风的咖菲猫
浏览 73回答 1
1回答

烙印99

我不认为你可以用纯 Java 做到这一点。我很确定您需要运行外部命令或调用本机代码来检测 JAR 文件是否在网络共享上。您需要做的第一部分是获取 JAR 文件的绝对路径:Class&nbsp;mainClass&nbsp;=&nbsp;MyMainClass.class;File&nbsp;jarFile&nbsp;=&nbsp;new&nbsp;File(mainClass.getProtectionDomain() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getCodeSource() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getLocation() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toURI());我在 github 上找到了一个由 Aaron Digulla 编写的“要点”,它完成了任务的第二部分:https://gist.github.com/digulla/31eed31c7ead29ffc7a30aaf87131defAaron 的代码采用 Windows 绝对路径,提取盘符,然后运行 Windowsnet use <drive-letter>:命令来测试该驱动器是否为共享驱动器。另一种方法是实现批处理文件执行以下操作的逻辑:提取 JAR 文件的驱动器名称用于net use ...测试共享驱动器使用相同的技术检查 Java 安装是否不在共享驱动器上1。使用java命令启动应用最后,拒绝在共享驱动器上运行可能不是一个好主意。用户可能有这样做的原因,而您并不知道。我建议提示用户并让用户选择继续。或类似的东西。或者,在应用程序的安装说明中记录不建议将 JRE/JDK 和应用程序安装在共享驱动器(或等效驱动器)上。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java