Je veux copier un fichier .exe existant d'un répertoire à un autre et le lancer ensuite avec Java. Comme ceci:Java: la copie d'un fichier exe et le lancement par la suite échouent
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());
La sortie est comme ceci:
Existing: true
Launching C:\test\Launcher.new.exe
Result: 2
Ainsi Java dit que le fichier est valide et existant, mais Windows ne peut pas lancer le processus, car il pense que le fichier n'est pas Là. Les chemins sont absolus et avec des antislashs. J'ai également toutes les permissions sur les fichiers, donc je suis autorisé à les exécuter. Le fichier Launcher.new.exe est généré par Launch4j. Il est donc plus ou moins autonome. Au moins, cela ne dépend pas des DLL dans le même dossier. Mais étrange: Cela fonctionne quand je copie et lance le notepad.exe.
Encore une chose étrange: Si je ne copie pas le fichier par Java mais à la main, le lancement échoue également avec la même erreur.
OS est Vista avec SP1.
Une idée?
ProcessMonitor ne montre aucune erreur et déclare que le fichier a été lancé.Mais il ne s'est rien passé par la suite. – Philip
Quel genre de processus essayez-vous de lancer? Vous pouvez être en train de tomber sur l'UAC à Vista. – mdma
C'est un .exe développé par moi. Aucun UAC n'apparaît. Il n'y a pas non plus de "logiciel de sécurité" avec des trucs ressemblant à du bac à sable. – Philip