You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行ELF读写操作时遇CreateProcess error=193错误求助

解决CreateProcess error=193: %1 is not a valid Win32 application错误

这个错误我之前帮不少开发者排查过,其实原因很明确:你在Windows系统里尝试运行的./optimizer是一个Linux平台的ELF格式可执行文件,而Windows的CreateProcess API只能识别PE格式的Windows可执行文件(比如.exe、.com这类),直接执行自然会报错。

给你几个可行的解决方案,按需选择:

  • 换用Windows版本的optimizer工具
    如果这个工具提供了Windows编译版本(后缀是.exe的PE格式文件),直接把命令里的./optimizer替换成对应的.exe路径就行。比如:

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

    要是exe不在当前Java程序的工作目录里,记得写全路径,比如"C:\\tools\\optimizer.exe"(Java里路径的反斜杠要写两个哦)。

  • 通过WSL(Windows子系统)运行
    如果你已经装了WSL(比如Ubuntu子系统),可以借助WSL来执行这个Linux二进制文件,命令改成这样:

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

    要注意的是,得确保optimizer在WSL的文件系统里能找到,或者直接写WSL里的绝对路径,比如"wsl /home/yourname/bin/optimizer"。另外,如果你的sourceFile是Windows下的路径,要转换成WSL能识别的挂载路径(比如C:\test\file.txt对应/mnt/c/test/file.txt),或者确保WSL有权限访问这个文件。

  • 用Cygwin/MinGW环境执行
    如果你有Cygwin或者MinGW这类类Unix环境,也可以通过它们的bash来运行命令:

    p = r.exec("C:\\cygwin64\\bin\\bash.exe -c './optimizer " + sourceFile + " " + sourceFile + "a" + " --all -i'");
    

    同样要保证optimizer在Cygwin的环境中是可执行状态,路径也要对应上。

最后给你个小建议:在Java里调用外部命令时,优先用ProcessBuilder代替Runtime.exec(),它能更灵活地处理参数,避免因为参数带空格导致的拆分错误。比如上面的WSL命令可以改成这样:

ProcessBuilder pb = new ProcessBuilder("wsl", "./optimizer", sourceFile, sourceFile + "a", "--all", "-i");
pb.inheritIO(); // 可选,让子进程的输出直接显示在Java程序的控制台里
Process p = pb.start();

内容的提问来源于stack exchange,提问作者FinalYear Nutech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:15:20