我们有一个在 Windows XP、Windows Vista、Windows 7 等上运行的桌面应用程序(它是用 cobol 编写的,但我认为在这种情况下它是不相关的)。
在我们的源代码中,我们ShellExecuteEx
使用open
.
在这之后——为了等待被调用程序的终止——我们WaitForSingleObject
用infinite
.
它可以正常工作,仅在带有图像的 windows-7 机器和默认图像查看器上我们有问题。
如果ShellExecuteEx
在那里调用 jpg 或 tif 文件并且机器只有默认的 windows 图像/照片查看器,则会发生错误。WaitForSingeObject
返回WAIT_FAILED
并GetLastError()
说:INVALID_HANDLE
。
当有另一个图像查看器(例如 Picasa 照片查看器、Evince windows 版本或 JPEGView)时,这不会在 Windows 7 上发生。
我不知道 Windows 7 和ShellExecuteEx
. ShellExecuteEx
不返回错误代码!
提前非常感谢。
更新:感谢您的回答。
@David Heffernan:正如你所说,在它不起作用的情况下,ShellExecuteEx 的返回码(hInstApp)为 42(好的!)并且 hProcess 为 NULL!(唯一启动的新进程是 dllhost.exe。)
但是,我在另一台 Windows 7 机器上测试了整个东西。在这种情况下,我做了以下事情:
- 在这台机器上,Picasa 是默认查看器。
- 我切换回默认设置(Windows 照片查看器)。
- 有效!
- 然后我没有关闭照片查看器并在我们的应用程序中再次按下“显示”。- 它也可以工作(弹出一个新的查看器实例),即使 Windows 照片查看器已经在运行!