我的应用程序完全是用 java 编写的(我们从 java8 迁移到 java11)并且在 High Sierra 下运行良好:
new RandomAccessFile(file_on_network_volume, "rws")获得访问权限并继续执行。
在Catalina下运行它失败了
java.io.FileNotFoundException: /Volumes/messages/xyz/FILE.xdt (Operation not permitted)
我知道任何尝试访问网络卷的应用程序都需要特殊权限,我在系统偏好设置中查看了它们,可以将它们删除以tccutil reset SystemPolicyNetworkVolumes [bundle_id]进行重复测试。
java 代码如何正确请求用户的访问权限,以便处理可以继续?
到目前为止我做了什么:
AccessController.doPrivileged((PrivilegedExceptionAction<RandomAccessFile>) () -> new RandomAccessFile(file, "rws")); <key>NSNetworkVolumesUsageDescription</key> <string>@@bundle_name@@ benötigt Zugriff auf ein Netzwerkvolume.</string> 但仍然缺少一些东西。应用程序未请求权限,因此操作失败。IntelliJ 做了一些我目前还没有弄清楚的正确的事情。