【发布时间】:2013-12-02 02:17:58
【问题描述】:
我正在尝试使用以下功能打开图像:
HANDLE openFile(char *path){ // path = "C:\Users\Foo Bar\Code\Test\test.jpg"
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
SHELLEXECUTEINFOW info;
memset(&info, 0, sizeof(info));
info.cbSize = sizeof(info);
info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NOASYNC ;
info.hwnd = NULL;
info.lpVerb = L"open";
info.lpFile = utf8_toWchar(path);
info.lpParameters = NULL;
info.lpDirectory = NULL;
info.nShow = SW_SHOW;
info.hInstApp = NULL;
if (!ShellExecuteExW(&info)){
System_printLastErrorString(); //never gets here
}
//free((void*)info.lpFile);
CoUninitialize();
return info.hProcess; //this is always NULL
}
问题在于info.hProcess 始终是NULL,尽管默认图像编辑程序未打开并且稍后打开。
我该如何解决这个问题?
旁注:我不知道这是否相关,但调用程序是 Qt 应用程序。
【问题讨论】:
-
并非所有执行都会导致进程的创建。例如,inproc 激活在您的进程中运行。
-
@RaymondChen 这显然不是在这种情况下发生的事情,因为几秒钟后会产生一个进程。
-
进程不是由 ShellExecute 创建的。 (看起来它是在 ShellExecute 已经返回之后创建的,并且 ShellExecute 不是通灵的。)
-
@RaymondChen 不......但我认为它只是以异步方式创建它,尽管有标志,问题是为什么。
-
启动了什么进程?标准图片查看器应用程序在进程内运行。