Je souhaite appeler Program1 à partir de Program2 avec exactement les mêmes parameters que ceux avec lesquels j’ai appelé Program2. Sous Linux, je peux le faire comme ceci:
int main(char argc, char* argv[]){ execv("./Program1", argv); }
Dans Windows, j’ai essayé CreateProcess
mais comme le premier message le dit, il existe un problème potentiel: “argv [0] ne contient pas le nom du module comme prévu”. Je veux envoyer l’argv approprié [0] à Program1. Que devrais-je faire?
argv [0] est le nom du programme lui-même.
Tu devrais faire :
int main(char argc, char **argv) { char* argvForProgram1[] = { "./Program1", 0 } execv(argvForProgram1[0], argvForProgram1); }
ou pour garder vos arguments précédents:
int main(char argc, char **argv) { char** argvForProgram1 = argv; argvForProgram1[0] = "./Program1"; execv(argvForProgram1[0], argvForProgram1); }
Utiliser execve
est également préférable, car vous conservez l’environnement:
int main(char argc, char **argv, char **envp) { char** argvForProgram1 = argv; argvForProgram1[0] = "./Program1"; execve(argvForProgram1[0], argvForProgram1, envp); }