繁体   English   中英

为什么ShellExecuteEx不返回进程句柄?

[英]Why is ShellExecuteEx not returning the process handle?

我正在尝试使用以下功能打开图像:

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应用程序。

我最终自己给AssocQueryString的结果调用CreateProcess 这给了我所需的手柄。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM