un couple des variations java.lang.Runtime.exec() a un argument dir, donc je suppose que vous ne pensez pas à cela?
Vous pouvez compiler le programme C suivant et l'exécuter en tant que wrapper pour démarrer n'importe quel programme dans le répertoire de votre choix. Si vous utilisez un tableau de chaînes avec Runtime.exec, vous éviterez tous les problèmes d'analyse/de portabilité/de citation correcte des arguments.
Je n'ai pas une machine Windows pour tester ici, mais si vous compilez le programme C pour vous cdexe.exe devrais pouvoir l'utiliser comme suit:
public class Main {
public static void main(String args[]) {
String[] s = { "c:\\some\\place\\cdexe.exe",
"c:\\start\\dir", "c:\\my\\batch\\file.bat", "arg1", "..." };
try {
java.lang.Runtime.getRuntime().exec(s);
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
}
Je suppose que unistd.h n'est peut-être pas disponible sur Windows, mais remplacez-en par un contenant un prototype execv.
#include <stdio.h>
#include <unistd.h> // or hard code "int execv(const char *path, char *const argv[]);"
int main(int argc, char *argv[])
{
if (argc < 3) {
fprintf(stderr, "Error: Usage: %s <directory> <program> [arguments]\n", argv[0]);
return 1;
}
if (chdir(argv[1]) < 0) {
perror("Error");
fprintf(stderr, "chdir(%s) failed\n", argv[1]);
return 1;
}
argv[1] = argv[2];
execv(argv[1], &argv[2]); // use execvp if you want PATH to be searched
perror("Error");
fprintf(stderr, "execv returned\n");
return 0;
}
Aurais-je par exemple pour ce – user48094
Très utile! merci – Maroun
Juste enregistré mon jour: D –