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 theShellExecute
function 更详细地解释了原因。您应该在调用ShellExecute
之前调用CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
,之后调用CoUninitialize()
。
一般不应使用L"open"
作为动词,而应使用NULL
。 NULL
将始终为您提供不总是“打开”的对象的“默认”操作(相当于双击它)。
【讨论】:
以上是关于ShellExecute 不适用于其他计算机的主要内容,如果未能解决你的问题,请参考以下文章
CreateProcess 适用于某些计算机,而不适用于其他计算机。为啥?
即时通讯程序 - 适用于 127.0.0.1,但不适用于其他计算机