Java CreateProcess error = 193,%1不是有效的Win32应用程序

时间:2018-05-03 13:40:04

标签: java swing netbeans promise

我正在尝试读取和编写可扩展链接格式(ELF)以下是我收到错误的行。

p =  r.exec("./optimizer " + sourceFile + " " + sourceFile + "a" + " " + "--all -i");

运行此行后,我遇到错误:

java.io.IOException: Cannot run program "./optimizer": CreateProcess             
error=193, %1 is not a valid Win32 application
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:450)
at java.lang.Runtime.exec(Runtime.java:347)
at GUIMode.GUIMode.actionPerformed(GUIMode.java:213)

2 个答案:

答案 0 :(得分:1)

很可能,您的代码没有在您认为的目录中运行。

使用此处给出的OP代码:how to get current directory in java?

File directory = new File (".");
try {
    System.out.println ("Current directory's canonical path: " 
            + directory.getCanonicalPath()); 
    System.out.println ("Current directory's absolute  path: " 
                + directory.getAbsolutePath());
}catch(Exception e) {
    System.out.println("Exceptione is ="+e.getMessage());
}

现在将其与优化程序所在的位置进行比较。

一般来说,除非您控制JVM的调用方式,否则您不能依赖相对路径。

答案 1 :(得分:1)

“%1不是有效的Win32应用程序”消息的一些可能原因包括:

  • 应用程序的路径名不正确,
  • 路径名指定的文件不会被识别为可执行文件,或
  • 可执行文件是32位但由于某种原因它正在尝试加载664位DLL。

在这种情况下,您正在使用可执行文件的相对路径名,因此JVM的当前目录可能与您的想法不同......并且optimize文件不在该目录中。< / p>

尝试以下方法:

  1. 用绝对路径名替换"./optimizer"

  2. 命令(绝对)路径名或sourceFile参数包含空格,用字符串数组替换命令字符串; e.g。

      exec(new String[]{
             "C:/path/to/optimizer",
             sourceFile, sourceFile + "a", "--all", "-i"});
    
  3. 尝试从命令提示符运行该命令。我们的想法是检查这不是由不可执行文件或DLL问题引起的。