CreateProcess()在cmd中工作,但如果在cygwin中执行

时间:2015-05-02 11:38:47

标签: c++ windows cygwin

我正在开发一个关于Windows的c ++项目,我想使用cygwin作为目标环境,但是作为替换cmd的shell,我的项目实际上是为mingw编译的。

我的程序现在只执行一个CreateProcess,问题是,如果我从cmd调用它,它可以工作,如果我从cygwin执行程序,它仍然没有做什么,而CreateProcess()仍然返回true。

这就是代码:

int exec_module(const string& name, HANDLE stdIn, HANDLE stdOut, HANDLE stdErr) {

STARTUPINFO child_sinfo = { sizeof(child_sinfo) };
PROCESS_INFORMATION child_pinfo;
ZeroMemory(&child_sinfo, sizeof(child_sinfo));
child_sinfo.cb = sizeof(child_sinfo);

ZeroMemory(&child_pinfo, sizeof(child_pinfo));

child_sinfo.dwFlags = STARTF_USESTDHANDLES;
child_sinfo.hStdInput = stdIn;
child_sinfo.hStdOutput = stdOut;
child_sinfo.hStdError = stdErr;

return CreateProcess(0, _T((char *) name.c_str()), 0, 0, false,0, 0, 0, &child_sinfo, &child_pinfo);
}

我称之为:

if (!exec_module("caccone.exe", GetStdHandle(STD_INPUT_HANDLE), GetStdHandle(STD_OUTPUT_HANDLE), GetStdHandle(STD_ERROR_HANDLE))) {
    cout << "Errore durante l'esecuzione del modulo" << endl;
}

我无法弄清楚问题是什么。

1 个答案:

答案 0 :(得分:0)

我的坏在这里,为了在cygwin中运行良好,我必须在父级和子级之间添加同步代码,但cmd shell也以一种天真的方式工作。 感谢Harry Johnston对_T宏观点的看法。