デスクトップアプリケーションは、Windows XP、Windows Vista、Windows 7などで実行されています(これはCOBOLで記述されていますが、この場合は関係ないと思います)。
ソースコードでは、を使用ShellExecuteEx
して呼び出しますopen
。
この後、呼び出されたプログラムの終了を待つために、を使用して呼び出しWaitForSingleObject
ますinfinite
。
それは問題なく動作していますが、Windows-7でのみ動作します-画像とデフォルトの画像ビューアを備えたマシンで問題が発生します。
jpgまたはtifファイルShellExecuteEx
に対してが呼び出され、マシンにデフォルトのWindowsイメージ/フォトビューアーしかない場合、エラーが発生します。WaitForSingeObject
戻っWAIT_FAILED
てGetLastError()
言う:INVALID_HANDLE
。
これは、Picasa Photo Viewer、Evince Windowsバージョン、JPEGViewなどの別の画像ビューアがあるWindows7では発生しません。
Windows7およびのデフォルトの画像ビューアのどこに問題があるのかわかりませんShellExecuteEx
。ShellExecuteEx
エラーコードを返しません!
よろしくお願いします。
更新:ご回答ありがとうございます。
@David Heffernan:あなたが言ったように、それが機能しない場合、ShellExecuteExのリターンコード(hInstApp)は42(ok!)であり、hProcessはNULLです!(開始された唯一の新しいプロセスはdllhost.exeでした。)
しかし、私は別のWindows7マシンですべてをテストしました。この場合、私は次のことを行いました
。-このマシンでは、Picasaがデフォルトのビューアでした。
-デフォルト(Windowsフォトビューアー)に戻しました。
- 機能した!
-次に、フォトビューアを閉じずに、アプリケーションで[表示]をもう一度押しました。-Windowsフォトビューアーが既に実行されている場合でも、機能しました(ビューアーの新しいインスタンスがポップアップしました)。