从windows c/c++代码中使用特定参数执行外部程序



我想用与调用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);
}

最新更新