既存の.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をコピーして起動すると機能します。
もう1つ奇妙なことは、ファイルをJavaではなく手動でコピーすると、起動も同じエラーで失敗することです。
OSはSP1を搭載したVistaです。
どんな手掛かり?