所以我有两个应用程序。
- 1) 用于下载客户端应用程序版本的启动器应用程序
(v2、v3、v3 等)。
- 2) 最终用户使用的客户端。
工作流程基本上是打开启动器,然后选择要运行的客户端版本。
ProcessBuilder processBuilder = new ProcessBuilder(revision.getPath() + "/" + AutoUpdate.OSX_EXE);
AutoUpdate.process = processBuilder.inheritIO().start();
客户端使用 jxBrowser 并需要下载/解压二进制文件。但是,当我下载 .zip 并解压缩并设置可执行文件的文件权限并从启动器中运行它时,它不起作用。
但是当我下载 .zip 版本并自行解压并在没有启动器的情况下运行它时,它工作得很好吗?
这是一个使用 excelsiorjet 编译为 native 的 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);
}
最佳答案
我通过 Build 在 MAC 机器上遇到了同样的问题。如果我通过 STS/Eclipse 运行它,它工作得很好。我使用了以下内容:
- JRE - jre1.8.0_232_windows(OpenJDK 服务器虚拟机 MAC 上的 Corretto-8.232.09.1)和 Corretto-8.232.09.2,
- JxBrowser 版本 7.3,
MAC 10.14( Mojave ) 我通过向\lib 文件夹(放置我的 jxBrowser 文件的位置)授予可执行权限解决了该问题。\bin 文件夹权限代码已经存在。您可以引用以下代码。
if(OSDetector.isMacOSX()) { String binPath = new File(new File(lJreVersion, "bin").toString()).getAbsolutePath(); String libPath = new File(new File(lJreVersion, "lib").toString()).getAbsolutePath(); logger.info("getSpecifiedJavaExecutable() => " + binPath); setExecutable(binPath); setExecutable(libPath); } private void setExecutable(String path){ File folder = new File(path); File[] listOfFiles = folder.listFiles(); for (int i = 0; i < listOfFiles.length; i++) { if (listOfFiles[i].isFile()) { System.out.println("File " + listOfFiles[i].getName()); listOfFiles[i].setExecutable(true); } else if (listOfFiles[i].isDirectory()) { System.out.println("Directory " + listOfFiles[i].getName()); } }
关于java - 使用 java 应用程序解压缩时文件权限被拒绝,手动工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51072582/