ShellExecute 不适用于其他计算机

Posted

技术标签:

【中文标题】ShellExecute 不适用于其他计算机【英文标题】:ShellExecute doesn't work for other computer 【发布时间】:2016-01-21 02:52:59 【问题描述】:

我用 Win32Api 做了一个程序。在程序中,它具有“ShellExecute”短语,以便执行 chrome 进行搜索。 以下是我写的内容的抽象。

#include <windows.h>
#include <shellapi.h>
int main () 
    ShellExecute(NULL, L"open", searching_url, NULL, NULL, SW_SHOWMAXIMIZED);

它适用于我的电脑。但是,我将这个 Windows 应用程序发送给其他人,他们说它不起作用。我的意思是只有 shellexecute 不起作用。我不知道从哪里开始找出问题所在。

您能否建议我如何以结构化的方式解决问题? 谢谢。

【问题讨论】:

检查返回值(让您的程序显示它并让其他人告诉您它是什么),这将为您提供有关执行失败原因的更多信息。 Reference for return value @M.M 从 ShellExecute 返回值可能没用。要获得正确的错误处理,请使用 ShellExecuteEx。 ShellExecute 是否显示错误?你检查过 ShellExecute 的返回值吗? 感谢所有 cmets 和答案。我将 L"open" 更改为 NULL,它成功了!但我仍然不确定为什么会这样。 因为正如 Jonathan Potter 所指出的那样,动词“open”可能不存在。 【参考方案1】:

尝试两件事:

ShellExecute 可能需要在某些情况下初始化 COM。 docs for the ShellExecute function 更详细地解释了原因。您应该在调用ShellExecute 之前调用CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE),之后调用CoUninitialize()。 一般不应使用L"open" 作为动词,而应使用NULLNULL 将始终为您提供不总是“打开”的对象的“默认”操作(相当于双击它)。

【讨论】:

以上是关于ShellExecute 不适用于其他计算机的主要内容,如果未能解决你的问题,请参考以下文章

CreateProcess 适用于某些计算机,而不适用于其他计算机。为啥?

即时通讯程序 - 适用于 127.0.0.1,但不适用于其他计算机

Azure 认知服务 - 计算机视觉 - OCR 不适用于手写

EasyHook 不适用于其他线程

ShellExecute()函数包含在哪个lib库中?

WillPopScope 不适用于其他小部件