我想将现有的 .exe 文件从一个目录复制到另一个目录,然后使用 Java 启动它。像这样:
FileIO.copy( new File( sourceFile ), new File( targetFile ) );
System.out.println( "Existing: " + new File( targetFile ).exists() );
System.out.println( "Launching " + targetFile );
String cmd[] = { targetFile };
Process p = Runtime.getRuntime().exec( cmd );
p.waitFor();
System.out.println( "Result: " + p.exitValue() );
输出是这样的:
Existing: true
Launching C:\test\Launcher.new.exe
Result: 2
所以 Java 说该文件是有效的并且存在,但 Windows 只是无法启动该进程,因为它认为该文件不存在。路径是绝对的并带有反斜杠。我还拥有文件的所有权限,因此我可以执行它们。Launcher.new.exe 由 Launch4j 生成,因此它或多或少是独立的。至少它不依赖于同一文件夹中的 DLL。但奇怪的是:当我复制并启动 notepad.exe 时它可以工作。
一件更奇怪的事情:如果我不通过 Java 而是手动复制文件,启动也会失败并出现同样的错误。
操作系统是带有 SP1 的 Vista。
有什么线索吗?