我想从Program2调用Program1,其参数完全相同,我称之为Program2。 在Linux中,我可以这样做:
int main(char argc, char* argv[]){
execv("./Program1", argv);
}
在Windows中,我尝试了CreateProcess
但正如第一篇文章所述,存在潜在问题:“argv [0]不包含预期的模块名称”。我想向Program1发送适当的argv [0]。我该怎么办?
答案 0 :(得分:1)
argv [0]是程序本身的名称。
你应该这样做:
int main(char argc, char **argv)
{
char* argvForProgram1[] = { "./Program1", 0 }
execv(argvForProgram1[0], argvForProgram1);
}
或保留以前的args:
int main(char argc, char **argv)
{
char** argvForProgram1 = argv;
argvForProgram1[0] = "./Program1";
execv(argvForProgram1[0], argvForProgram1);
}
使用execve
也更好,因为你保持环境:
int main(char argc, char **argv, char **envp)
{
char** argvForProgram1 = argv;
argvForProgram1[0] = "./Program1";
execve(argvForProgram1[0], argvForProgram1, envp);
}