我想用与调用Program2完全相同的参数从Program2调用Program1。在Linux中,我可以这样做:
int main(char argc, char* argv[]){
execv("./Program1", argv);
}
在windows中,我尝试了CreateProcess
但正如第一篇文章所说,存在潜在问题:"argv[0]不包含预期的模块名称"。我确实想将正确的argv[0]发送到Program1。我该怎么办?
argv[0]是程序本身的名称。
你应该做:
int main(char argc, char **argv)
{
char* argvForProgram1[] = { "./Program1", 0 }
execv(argvForProgram1[0], argvForProgram1);
}
或者保留您以前的参数:
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);
}