【发布时间】:2023-04-06 07:27:01
【问题描述】:
我想在 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(“图片文件中找不到指定的资源类型”)。
另外,上面的 CreateProcessW() 代码在我运行我自己的 HelloProcess.exe 时工作正常(打印你好,然后休眠几秒钟,由以下数字确定,然后退出。)
FullPathToExe="HelloProcess.exe", pwszParam="HelloProcess.exe 10".
有什么想法吗?感谢您的任何提示!
【问题讨论】:
-
FullPathToExe 是字符串还是 wstring?
-
这是一个字符串。我认为变量的类型还可以,因为代码使用我自己的 *.exe 运行良好。不知道是不是参数中的“"有问题?
-
标题应更改为“输入/输出重定向:system() vs. CreateProcess()”,但我不允许编辑它。在
<input-file> output-file中,间距也是无关紧要的——因此会产生误导。字符<>是前缀,但 OP 的间距意味着它们是括号。不会误导的间距:<output-file >input-file.
标签: windows system createprocess external-process