我们有一个桌面应用程序运行在Windows XP,Windows Vista,Windows 7等(它是用cobol编写的,但我认为在这种情况下它是不相关的)。Windows 7上的ShellExecuteEx与默认图像/照片查看器
在我们的源代码中,我们调用ShellExecuteEx
和open
。
之后 - 为了等待被叫程序终止 - 我们将WaitForSingleObject
与infinite
联系起来。
这是工作没有问题,只有在windows-7-machines与图像和默认图像查看器我们有问题。
如果调用ShellExecuteEx
用于jpg或tif文件,并且机器仅具有默认的Windows图像/照片查看器,则会发生错误。 WaitForSingeObject
返回WAIT_FAILED
和GetLastError()
说:INVALID_HANDLE
。
当Windows 7上有其他图像查看器(例如Picasa照片查看器或Evince windows版本或JPEGView)时,不会发生这种情况。
我不知道问题出在Windows 7和ShellExecuteEx
上的默认图像查看器。 ShellExecuteEx
不会返回错误代码!
非常感谢提前。
更新: 谢谢你的回答。正如你所说的,在它不起作用的情况下,ShellExecuteEx的返回码(hInstApp)是42(ok!),而hProcess是NULL! (唯一启动的新进程是dllhost.exe。)
但是,我在另一台Windows 7机器上测试了整个事情。在这种情况下,我做了以下操作:
- 在这台机器上,Picasa是默认查看器。
- 我切换回默认(Windows照片查看器)。
- 它的工作!
- 然后我没有关闭照片查看器,并在我们的应用程序中再次按下“显示”。 - 即使Windows照片查看器已在运行,它也起作用(浏览器的新实例弹出)!
你确定ShellExecuteEx没有返回错误吗?即使按照Windows API的标准,它的错误处理也是不透明的 - 最终必须将结构的hInstApp成员转换为int并将其与32进行比较。它存储在结构的hInstApp成员中的值是什么失败的情况? – DavidK 2013-03-19 12:57:34
你在等什么?你能告诉我们那个代码吗? – Deanna 2013-03-19 14:29:07
@DavidK你很困惑。你正在考虑'ShellExecute'。实际上'ShellExecuteEx'的体面错误报告。 – 2013-03-19 14:47:55