デスクトップアプリケーションは、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フォトビューアーが既に実行されている場合でも、機能しました(ビューアーの新しいインスタンスがポップアップしました)。