ProcessBuilder异常CreateProcess error=2, ??Õ?»µ½?¶

后面那堆乱码使我知道只好用谷歌去查一下问题答案,翻着翻着就有了启发。

首先自己在捣鼓如何获取APK信息,然后了解了一下ProcessBuilder类,具体这个类如何获取APK信息,我另外写了一篇分析这个类的文章:

public class TestProcess {
	public static void main(String[] args) {
		ProcessBuilder pb = new ProcessBuilder();
		pb.redirectErrorStream(true);
		try {
			Process p = pb.command("C:/getapkinfo/aapt.exe d badging D:/new/test.apk").start();
			BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(),"UTF-8"));
			String s = "";
			while((s=br.readLine())!= null){
				System.out.println(s);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

执行这段代码的时候,就报了

java.io.IOException: Cannot run program "C:/getapkinfo/aapt.exe d": CreateProcess error=2, ?????μ???

的错误。

但是直接在Dos窗口是可以执行的。

将代码改为,

Process p = pb.command("ipconfig").start();

是正常执行的。后面搜到的一大堆答案全部都是什么路径问题。不,都是错误的解决方法。

ProcessBuider的API写到It is not checked whether
command
corresponds to a valid operating system command。就是非系统指令并不会提示。

然后受到网上一个答案的启发和源码的启发,我尝试将代码改为:

Process p = pb.command("C:/getapkinfo/aapt.exe d","badging","D:/new/test.apk").start();

是的,这样就正常执行了。

为什么呢?

似乎指令之间如果有空格而不用不同的字符串隔开,就会无法识别指令。

Process p = pb.command("C:/getapkinfo/aapt.exe"," ","d","badging","D:/new/test.apk").start();

这样是正常执行的,但是,这样执行后的结果等价于在Dos窗口输入:C:/getapkinfo/aapt.exe罢了。

然后,本来ipconfig /all是可以输出ip地址的详细信息的。

但是改为:

Process p = pb.command("ipconfig //all").start();

也是报相同的错误,到这里大家就知道了错误出在哪里了。

指令中有空格的需要用不同的字符串分开。

在重新读一下该方法的API。

public ProcessBuilder command(String... command)

command - a string array containing the program and its arguments

可见指令与参数是要放在不同的字符串数组里面的,所以下面才会正常执行:

Process p = pb.command("C:/getapkinfo/aapt.exe"," ","d","badging","D:/new/test.apk").start();
时间: 2024-11-08 19:05:37

ProcessBuilder异常CreateProcess error=2, ??Õ?»µ½?¶的相关文章

java 调用可执行文件时,ProcessBuilder异常CreateProcess error=2

java 调用其他应用程序时,可能在windows下没有问题,但是转到linux下,却会报这样那样的错误,比如有设计文件操作会报FileNotFoundException等等(如下代码): 1 ProcessBuilder builder = new ProcessBuilder(); 2 builder.command(ffmpeg -i /data/download_video/20160425/20160425235938929164582_1.flv -y -vcodec libx264

解决方案--java执行cmd命令ProcessBuilder--出错Exception in thread "main" java.io.IOException: Cannot run program "dir d:\": CreateProcess error=2(xjl456852原创)

当我尝试在java中通过ProcessBuilder运行window的cmd命令时出现错误: public static void main(String [] args) throws IOException { ProcessBuilder builder = new ProcessBuilder(); Process process = builder.command("dir d:\\").start(); InputStream inputStream = process.g

Jenkins报错Caused: java.io.IOException: Cannot run program "sh" (in directory "D:\Jenkins\Jenkins_home\workspace\jmeter_test"): CreateProcess error=2, 系统找不到指定的文件。

想在本地执行我的python文件,我本地搭建了一个Jenkins,使用了execute shell来运行我的脚本,发现报错 [jmeter_test] $ sh -xe D:\tomcat\apache-tomcat-8.5.20\temp\jenkins4583980269774421650.sh The system cannot find the file specified FATAL: command execution failed java.io.IOException: Crea

异常:error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'

error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient' error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'. Make sure the pro

CreateProcess error=206, The filename or extension is too long"的一个解决方案

在实际项目中我使用antrun 和 closure-compiler压缩JS项目.然后我就使用如下代码: 首先加入依赖. <dependency> <groupId>com.google.javascript</groupId> <artifactId>closure-compiler</artifactId> <version>v20160315</version> </dependency> pom.xml

Cannot run program “git.exe”: createprocess error=2,系统找不到指定的文件

Android Studio提供VCS(Version Control System)版本控制系统,默认情况使用Git.GitHub工具需要配置git.exe路径,否则提示“cannot run program git.exe createprocess error=2 系统找不到指定的文件”的错误,如下图: 点击查看详情

Gradle &#39;MYasprj&#39; project refresh failed Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容

Gradle ‘MYasprj’ project refresh failed Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容.请查看计算机的系统信息,了解是否需要 x86 (32 位)或 x64 (64 位)版本的程序,然后联系软件发布者. 解决方案: 你开发项目的引用Javajdk,与本机安装的Java jdk版本不一致,打开项目后,在project structure里面更改一下本机的真实的java jdk路径.  Gr

Flex获取url参数异常(Error #2060)

解决办法:chrome在服务器上运行才会获取到值,在本地打开会报安全沙箱异常(Error #2060) 1 private function getParameter(name:String):String{ 2 if (ExternalInterface.available) { 3 try{ 4 var query:String = ExternalInterface.call("window.location.search.substring", 1); 5 var pairs:

Hadoop在Windows系统的Eclipse下运行Cannot run program &quot;chmod&quot;: CreateProcess error=2解决办法

运行hadoop程序报错如下: Exception in thread "main" java.io.IOException: Cannot run program "chmod": CreateProcess error=2 解决方法: 只需要把cygwin的bin目录加到windows的用户环境变量中就可以了,然后需要重启eclipse