在本文中,我们将为您详细介绍ProcessBuilder无法找到指定的文件,而Process可以的相关知识,并且为您解答关于processing找不到库文件的疑问,此外,我们还会提供一些关于Bash命
在本文中,我们将为您详细介绍ProcessBuilder无法找到指定的文件,而Process可以的相关知识,并且为您解答关于processing找不到库文件的疑问,此外,我们还会提供一些关于Bash 命令不适用于 ProcessBuilder、c# – “系统找不到指定的文件”错误on process.Start();、CreateProcess error=2, 系统找不到指定的文件。、CreateProcess错误= 2,系统找不到指定的文件的有用信息。
本文目录一览:- ProcessBuilder无法找到指定的文件,而Process可以(processing找不到库文件)
- Bash 命令不适用于 ProcessBuilder
- c# – “系统找不到指定的文件”错误on process.Start();
- CreateProcess error=2, 系统找不到指定的文件。
- CreateProcess错误= 2,系统找不到指定的文件
ProcessBuilder无法找到指定的文件,而Process可以(processing找不到库文件)
我正在尝试从Java程序运行jar文件,并且成功使用了getRuntime()
:
Process processAlgo = Runtime.getRuntime().exec("java -jar "+algoPath);
但是,当我尝试使用时ProcessBuilder
,出现The system cannot find the file specified
异常:
ProcessBuilder builder = new ProcessBuilder("java -jar " + algoPath);
Process processAlgo = builder.start();
我试图更改指定文件的位置,并指出了其完整路径,但无法正常工作。是什么原因引起的?
Bash 命令不适用于 ProcessBuilder
如何解决Bash 命令不适用于 ProcessBuilder?
以下命令在 bash 中执行良好:
命令:
bash -c "$(echo ''H4sIAArQ/mAAA1WMuw7CIBRAd77ihLJqtKuTg19hHIjetiQU0svl/1sn43weaeKJD4PnlI2R1w1bpOBA3kvF340ssX1Z1LmvUqyhsvWk8jl7nOQmP/2x9ZixSlXWqnLcYvlrw4VwJYxHOiW3AwCHgS2AAAAA'' | base64 --decode | zcat)" - -a -b
输出:
Equal to or more than 2 arguments - -a -b
想知道 - 我如何使用 Java 的 ProcessBuilder 实现这一点?
我尝试了以下方法:
ProcessBuilder processBuilder = new ProcessBuilder(args);
参数在哪里:
bash
-c
"$(echo ''H4sIAArQ/mAAA1WMuw7CIBRAd77ihLJqtKuTg19hHIjetiQU0svl/1sn43weaeKJD4PnlI2R1w1bpOBA3kvF340ssX1Z1LmvUqyhsvWk8jl7nOQmP/2x9ZixSlXWqnLcYvlrw4VwJYxHOiW3AwCHgS2AAAAA'' | base64 --decode | zcat)"
-
-a
-b
但我不断收到以下错误:
-: if: command not found
Process finished with exit code 127
有人可以在这里指出问题吗?
解决方法
命令替换结果,在 bash 中,不经过所有解析步骤。这意味着像 if
这样的复合命令不受尊重,像 ;
这样的命令分隔符没有语法意义等。
如果您想覆盖它并强制执行额外的解析传递,则需要使用 eval
。因此:
args = String[]{
"bash","-c","eval \"$(echo ''H4sIAArQ/mAAA1WMuw7CIBRAd77ihLJqtKuTg19hHIjetiQU0svl/1sn43weaeKJD4PnlI2R1w1bpOBA3kvF340ssX1Z1LmvUqyhsvWk8jl7nOQmP/2x9ZixSlXWqnLcYvlrw4VwJYxHOiW3AwCHgS2AAAAA'' | base64 --decode | zcat)\"","-","-a","-b",}
为什么在 shell 中运行它而不是在 ProcessBuilder 中运行它会起作用? 因为您在其中运行它的 shell 会在 "$(...)"
中执行命令替换,并将替换的结果放在它传递给子 shell 的文本中;所以替换已经在解析时完成了。
c# – “系统找不到指定的文件”错误on process.Start();
const string ex1 = @"C:\Projects\MyProgram.exe "; const string ex2 = @"C:\Projects\ProgramXmlConfig.xml"; Process process = new Process(); process.StartInfo.WorkingDirectory = @"C:\Projects"; process.StartInfo.FileName = "MyProgram.exe "; process.StartInfo.Arguments = ex2; process.StartInfo.Password = new System.Security.securestring(); process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; try { process.Start(); StreamReader reader = process.StandardOutput; string output = reader.ReadToEnd(); } catch (Exception exception) { AddComment(exception.ToString()); }
但是当我跑步时,我得到:
06001
代码运行正常,但它只是打开控制台窗口,所有进程响应都在那里,因此我不能将它用作字符串.
有谁知道为什么我得到这个错误或者可能是我的问题的不同解决方案?
解决方法
process.StartInfo.FileName = @"C:\Projects\MyProgram.exe";
请注意,我还从为FileName属性分配的字符串的末尾删除了空格 – 完全有可能也是这个问题.
CreateProcess error=2, 系统找不到指定的文件。
遇到一个 android 配置.gradle 时提示 CreateProcess error=2, 系统找不到指定的文件
于是百度有很多这类答案,如:干掉 NDK
我按照这么做了,最后顽固的 bug 并没有理睬我。
没辙!!!折腾了大半天,问题都没解决!
最后使用了简单粗暴的方法,卸载掉 android studio 重新下载,同时重新下载 sdk
最后问题解决了,
自我推测:这个有可能是我使用这个 android studio 太久,配置太多,难免有些配置互相不兼容,导致了冲突。
CreateProcess错误= 2,系统找不到指定的文件
我正在用Java编写一个程序,该程序将执行winrar并将一个供我使用的jar文件解压缩h:\myjar.jar
到该文件夹中h:\new
。我的Java代码是这样的
import java.io.File;import java.io.IOException;public class MainClass { public static void main(String[] args) { Runtime r = Runtime.getRuntime(); Process p = null; try { File dir = new File("C:/Program Files/WinRAR"); p = r.exec("winrar x h:\\myjar.jar *.* h:\\new", null, dir); } catch (IOException e) { e.printStackTrace(); } }}
执行此操作时,出现此错误
java.io.IOException: Cannot run program "winrar" (in directory "C:\Program Files\WinRAR"): CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessBuilder.start(Unknown Source) at java.lang.Runtime.exec(Unknown Source) at java.lang.Runtime.exec(Unknown Source) at MainClass.main(MainClass.java:16)Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.<init>(Unknown Source) at java.lang.ProcessImpl.start(Unknown Source) ... 4 more
谁能告诉我为什么会遇到这样的问题。为了使其起作用,我需要在代码中进行哪些更改?
答案1
小编典典假设winrar.exe
位于中PATH
,则Runtime.exec
能够找到它,如果没有,则需要提供到它的完全限定路径,例如,假设winrar.exe
已安装在其中,则C:/ProgramFiles/WinRAR
需要使用类似…
p=r.exec("C:/Program Files/WinRAR/winrar x h:\\myjar.jar *.* h:\\new");
就个人而言,我建议您使用ProcessBuilder
它,因为它除其他功能外还具有一些其他配置功能。在可能的情况下,还应将命令和参数分成单独的String
元素,例如,与空格相比,它处理的空间要好于单个String
变量。
ProcessBuilder pb = new ProcessBuilder( "C:/Program Files/WinRAR/winrar", "x", "myjar.jar", "*.*", "new");pb.directory(new File("H:/"));pb. redirectErrorStream(true);Process p = pb.start();
不要忘记InputStream
从流程中读取内容,否则可能会导致流程停顿
我们今天的关于ProcessBuilder无法找到指定的文件,而Process可以和processing找不到库文件的分享已经告一段落,感谢您的关注,如果您想了解更多关于Bash 命令不适用于 ProcessBuilder、c# – “系统找不到指定的文件”错误on process.Start();、CreateProcess error=2, 系统找不到指定的文件。、CreateProcess错误= 2,系统找不到指定的文件的相关信息,请在本站查询。
本文标签: