Winapi 启动exe/快捷方式,不关心返回

Winapi 启动exe/快捷方式,不关心返回,winapi,launching-application,Winapi,Launching Application,我试图启动指向exe文件的exe文件和快捷方式(快捷方式上可能有命令行参数)。我一直在寻找一种winapi方法来启动它们,这样就不会关心/等待返回值。我只找到了一种方法,它要么阻塞直到启动的文件退出,要么异步等待直到它退出。有没有一种方法可以触发它的启动,而不在乎其他的呢?基本上就像用户双击该exe/快捷方式一样。易于使用ShellExecuteEx: SHELLEXECUTEINFO sei = {0}; sei.cbSize = sizeof(sei); sei.lpFile = L"c:\

我试图启动指向exe文件的exe文件和快捷方式(快捷方式上可能有命令行参数)。我一直在寻找一种winapi方法来启动它们,这样就不会关心/等待返回值。我只找到了一种方法,它要么阻塞直到启动的文件退出,要么异步等待直到它退出。有没有一种方法可以触发它的启动,而不在乎其他的呢?基本上就像用户双击该exe/快捷方式一样。

易于使用
ShellExecuteEx

SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof(sei);
sei.lpFile = L"c:\\path\\to\\your\\shortcut.lnk";
sei.nShow = SW_SHOWNORMAL;
ShellExecuteEx(&sei);

看一看[这个][1]答案,似乎你也想做同样的事情。[1] :非常感谢@cdanzmann,但这不是我所希望的。下面乔恩的回答很完美。我对乔恩有些好奇。我想知道为什么
ShellExecute
不能执行这种“异步”触发模式,不在乎,ShellExec或ShellExecEx的文档中都没有明确说明,您是怎么知道的?谢谢,所以我被拒绝访问(GetLastError为5),所以我在这里读到:然后我尝试了这个
CoInitializeEx(NULL,Conit_APARTMENTTHREADED | Conit_DISABLE_Ole1de)在调用上面的代码之前,但它继续给我5的错误,有什么想法吗?谢谢你again@Blagoh:
ShellExecuteEx
有一个返回值。在知道操作是否成功之前,它无法返回。在这种情况下,API必须解析快捷方式,潜在地加载shell扩展(这就是为什么需要在调用线程上初始化COM),并最终执行
CreateProcess
操作。只有这样才能返回错误/成功。谢谢@IInspectable,createProcess不会让我的启动应用程序等待退出时的响应吗?另外,由于ShellExec拒绝我访问,我将无法访问CreateProcess否?ShellExecuteEx似乎将错误5用作一般的“全面捕获”错误,因此它实际上可能是任何错误。您的pastebin看起来很奇怪-cbSize和fMask等字段不是64位字段,但它们显示为UInt64。我认为你的cbSize是错误的——32位版本应该是60,64位版本应该是104——而不是56。有关
SHELLEXECUTEINFO
结构的正确定义,请参阅。