【发布时间】:2018-12-06 22:16:16
【问题描述】:
所以我有两个应用程序。
- 1) 启动器应用程序下载客户端应用程序版本
(v2、v3、v3 等)。
- 2) 最终用户使用的客户端。
工作流程基本上是打开启动器,然后选择一个客户端版本来运行。
ProcessBuilder processBuilder = new ProcessBuilder(revision.getPath() + "/" + AutoUpdate.OSX_EXE);
AutoUpdate.process = processBuilder.inheritIO().start();
客户端使用 jxBrowser 并需要下载/提取所需的二进制文件。但是,当我下载 .zip 并解压缩并为可执行文件设置文件权限并从启动器中运行它时,它不起作用。
但是当我下载 .zip 版本并自己解压缩并在没有启动器的情况下运行它时,它工作正常吗?
这是一个使用 excelsiorjet 编译为本机的 java 应用程序。
这是我得到的错误:
Caused by: com.teamdev.jxbrowser.chromium.internal.ChromiumExtractorException: Failed to extract Chromium binaries into /var/folders/kb/f884blms2g56m8xscqnsg9jh0000gn/T/jxbrowser-chromium-60.0.3112.113.6.16
at com.teamdev.jxbrowser.chromium.internal.ChromiumExtractor.extractChromiumBinariesIfNecessary(Unknown Source)
at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.<init>(Unknown Source)
at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.create(Unknown Source)
at com.teamdev.jxbrowser.chromium.internal.ipc.IPC$a.<clinit>(Unknown Source)
... 4 more
Caused by: java.lang.RuntimeException: java.io.IOException: Cannot run program "/var/folders/kb/f884blms2g56m8xscqnsg9jh0000gn/T/jxbrowser-chromium-60.0.3112.113.6.16/7zr-mac": error=13, Permission denied
at com.teamdev.jxbrowser.chromium.internal.XZExtractor.extract(Unknown Source)
at com.teamdev.jxbrowser.chromium.internal.b.run(Unknown Source)
at java.security.AccessController.<unknown>(Unknown Source)
... 8 more
Caused by: java.io.IOException: Cannot run program "/var/folders/kb/f884blms2g56m8xscqnsg9jh0000gn/T/jxbrowser-chromium-60.0.3112.113.6.16/7zr-mac": error=13, Permission denied
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at com.teamdev.jxbrowser.chromium.internal.xz.XZ.decompress(Unknown Source)
... 11 more
Caused by: java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
这是我更改权限的代码:
if(AutoUpdate.OS.equalsIgnoreCase("OSX")){
File exe = new File(localPath + AutoUpdate.OSX_EXE);
exe.setReadable(true);
exe.setExecutable(true);
exe.setWritable(true);
File folder = new File(localPath + "rt");
folder.setReadable(true);
folder.setExecutable(true);
folder.setWritable(true);
}
else{
File exe = new File(localPath + AutoUpdate.WINDOWS_EXE);
exe.setReadable(true);
exe.setExecutable(true);
exe.setWritable(true);
File folder = new File(localPath + "rt");
folder.setReadable(true);
folder.setExecutable(true);
folder.setWritable(true);
}
【问题讨论】:
-
您用来运行Java应用程序的用户是否拥有
/var/folders/kb目录的权限? -
我相信其中一个库创建了该文件夹/目录,所以我不确定它是否存在。奇怪的是,如果我只是正常下载+解压缩应用程序,它会很好地创建该文件夹。但是,如果我从包装器启动器中解压缩并运行应用程序,它会拒绝访问。
标签: java file permissions