我想在 C 程序中执行 TEST.exe。当我使用

system( "TEST.exe <input-file> output-file" );

我可以得到我所期望的。

但是当我使用以下代码时 CreateProcessW() 无法正常工作(请参阅 How do I run an external program? ):
if (CreateProcessW(const_cast<LPCWSTR>(FullPathToExe.c_str()),
    pwszParam, 0, 0, false,
    CREATE_DEFAULT_ERROR_MODE, 0, 0,
    &siStartupInfo, &piProcessInfo) != false)
{
    /* Watch the process. */
    dwExitCode = WaitForSingleObject(piProcessInfo.hProcess,  (SecondsToWait * 1000));
    iReturnVal = GetLastError();
}
else
{
    /* CreateProcess failed */
    iReturnVal = GetLastError();
}

在哪里
FullPathToExe="TEST.exe", pwszParam="TEST.exe <input-file> output-file".

而 WaitForSingleObject() 返回 258,GetLastError() 返回 1813(“在图像文件中找不到指定的资源类型。”)。

此外,当我运行我自己的 HelloProcess.exe(打印 hello,并根据以下数字确定 sleep 几秒钟,然后退出。)时,上面的 CreateProcessW() 代码工作正常。
FullPathToExe="HelloProcess.exe", pwszParam="HelloProcess.exe 10".

有任何想法吗?感谢您的任何提示!

最佳答案

system 实际上会生成一个 cmd 实例,您的命令在其中运行:



这就是 <> 等重定向操作符起作用的原因。这不是 CreateProcess 的情况,它实际上只是生成一个进程而不是执行另一个进程的 shell。由于重定向运算符是 shell 的一个特性,而不是操作系统的特性,因此您必须手动对进程进行输入和输出。

关于windows - system() 和 CreateProcess()/CreateProcessW(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9970730/

10-11 00:34