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();

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 这个错误通常是由于系统找不到指定的可执行文件导致的。可能是因为文件路径不正确或文件不存在。您可以检查文件路径是否正确,并确保文件存在于指定的路径中。另外,您还可以尝试重新安装相关的软件,以确保所有必需的文件都已正确安装。 ### 回答2: 当你在使用Java的ProcessBuilder类或Runtime类的exec方法执行外部程序时,可能会遇到"CreateProcess error=2, 系统找不到指定的文件"的错误。 这个错误通常是因为Java无法找到你指定的文件。有几个可能的原因导致这个问题发生: 1. 文件路径错误:请确保你提供的文件路径是正确的。如果你使用的是相对路径,确保文件位于当前工作目录中。如果你使用的是绝对路径,请仔细检查路径是否正确。 2. 磁盘驱动器错误:有时候,你提供的路径可能是不正确的磁盘驱动器。请确保你提供的路径指向正确的磁盘驱动器。 3. 系统环境变量错误:某些情况下,你可能需要将外部程序的路径添加到系统的环境变量中,这样Java才能找到它。你可以手动将该路径添加到系统环境变量中,或者在Java代码中使用绝对路径进行执行。 4. 外部程序不存在:如果你提供的文件路径是正确的,但是文件本身并不存在,那么就会出现这个错误。请确保指定的文件存在于你指定的路径中。 综上所述,"CreateProcess error=2, 系统找不到指定的文件"错误通常是由于文件路径错误、磁盘驱动器错误、系统环境变量错误或外部程序不存在等原因导致的。通过仔细检查路径和确认文件的存在性,你应该能够解决这个问题。 ### 回答3: "CreateProcess error=2, 系统找不到指定的文件" 是一个常见的错误消息,它通常在尝试使用Java的Runtime类或ProcessBuilder类来启动外部程序时出现。 这个错误的原因是由于指定的文件无法在系统中找到。这可能是由于以下几个原因: 1. 文件路径错误:首先,我们需要确保指定的文件路径是正确的。请检查文件路径是否正确,包括文件名的拼写是否正确和路径是否正确。如果路径包含空格或特殊字符,可能需要用引号括起来。 2. 文件不存在:系统找不到指定的文件是因为文件实际上不存在于指定的路径中。请确保文件已经存在,并且您有读取和执行此文件的权限。 3. 环境变量设置错误:如果文件位于系统环境变量中指定的目录中,那么请确保环境变量设置正确。也许在您的系统上,文件所在的目录未被正确地添加到PATH环境变量中。 4. 文件权限问题:如果您是在使用Windows操作系统,那么请确保您具有足够的权限来运行该文件。确保您以管理员身份运行您的程序。 如果您仍然遇到这个错误,您可以尝试使用绝对路径来指定文件以确保正确访问文件。另外,您可以尝试将文件放置在当前工作目录下,以便可以简化文件路径。 作为一般建议,查看您的代码,并确保您指定的文件路径和文件名是正确的,并且您具有正确的权限来执行该文件。如果问题仍然存在,请参考系统错误消息以获得更多帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iaiti

赏顿早餐钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值