我遇到了这个问题。我的ShellExecute
工作正常,输出是PNG图像文件。问题是此过程需要一些时间(秒)才能生成文件。同时,我的result
已经执行,但它会产生错误消息,因为来自ShellExecute
的PNG文件尚未存在。如何确保文件先存在,然后才能执行result
。
ShellExecute(0,
_T("open"),
_T("c:\\convert.exe"),
full,
0,
SW_HIDE);
result = ExecuteExternalProgramCompare(L"c.png", L"t.png"); // this line always gives error because the file c.png is not produce yet by shellexecute above.
更新: 我尝试转换为ShellexecuteEx。
SHELLEXECUTEINFO info = {0};
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask = SEE_MASK_NOCLOSEPROCESS;
info.lpFile = _T("c:\\convert.exe");
info.lpParameters = full;
info.nShow = SW_HIDE;
答案 0 :(得分:1)
您应该使用ShellExecuteEx。这将允许您处理被调用的进程,以便您可以等待进程结束。
SHELLEXECUTEINFO info = {0};
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask = SEE_MASK_NOCLOSEPROCESS;
info.lpVerb = _T("open");
info.lpFile = _T("c:\\convert.exe");
info.lpParameters = full;
info.lpDirectory = NULL;
info.nShow = SW_HIDE;
if (ShellExecuteEx (&info))
{
WaitForSingleObject (info.hProcess, INFINITE);
}