我想将现有的 .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。
有什么线索吗?
最佳答案
嗯...我想知道这是否是 Vista 出色的用户访问控制在起作用...
您在程序文件中工作吗?如果是这样,请将所有内容移至单独的文件夹 (c:\CopyTest) 中,然后重试 - 看看是否有帮助...
关于Java:复制 exe 文件并随后启动失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2874896/