人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

::ShellExecute(NULL,_T(""),_T("http://www.google.co.jp/"),_T(""),_T(""),SW_SHOW);

Windows XP SP2で
httpプロトコルが Firefox 2.0.0.7 に関連付けられた環境にて上記のコードを実行すると、

・Firefoxが起動していない
・Firefox本体、または拡張機能のアップデートがある

の2つの条件を共に満たしている場合、
Firefoxが実行されるにも関わらず、戻り値がERROR_FILE_NOT_FOUNDとなります。
(上記の2つの条件を満たしていない場合の戻り値は32より大きい数値(成功)となります。)

ERROR_FILE_NOT_FOUNDは対象のファイルが存在しない時に返されるようですが、上記の条件との関連がわかりません。
なぜこのような事が起こるのでしょうか?

●質問者: koori
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:2.0 firefox HTTP Windows XP アップデート
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● cx20
●150ポイント ベストアンサー

・Firefoxが起動していない

・Firefox本体、または拡張機能のアップデートがある

の2つの条件を共に満たしている場合、

Firefoxが実行されるにも関わらず、戻り値がERROR_FILE_NOT_FOUNDとなります。

環境(Firefox 2.0.0.7 → 2.0.0.8 更新状態)を作って試してみました。

確かに、Firefox の更新を行った状態(次回起動時にインストールの状態)

----------------------------------
ソフトウェアの更新 [X]
----------------------------------
[!] 更新は Firefox の次回起動時にインストールされます。
 [ OK ]
----------------------------------

で、ShellExecute() による呼び出しを行うと ERROR_FILE_NOT_FOUND となるようです。

Firefox の更新処理の仕組みを、Process Monitor というツールで調べてみたところ、以下のような動作をしているようです。

<Firefox Update 時の処理>
[1656] Test.exe (ShellExecute() 呼び出し)
 ↓
 HKCR\http\shell\open\command\(Default)
 Data:C:\PROGRA~1\MOZILL~1\FIREFOX.EXE -requestPending -osint -url "%1"
 ↓
[2252] Firefox.exe -requestPending -osint -url "http://www.google.co.jp/" → Updater.exe 起動後、PID:2252 の Firefox.exe は終了
 ↓
[2236] Updater.exe "<%USERPROFILE%>\Local Settings\Application Data\Mozilla\Firefox\Mozilla Firefox\updates\0" "2252" "<Current Dir>" "C:\PROGRA~1\MOZILL~1\FIREFOX.EXE" "-requestPending" "-osint" "-url" "http://www.google.co.jp/" 
 ↓
[3628] Firefox.exe -requestPending -osint -url "http://www.google.co.jp/"

と、なっているようです。

以下は、通常の、Firefox での呼び出し処理です。

<Firefox 通常起動時の処理>
[1656] Test.exe (ShellExecute() 呼び出し)
 ↓
 HKCR\http\shell\open\command\(Default)
 Data:C:\PROGRA~1\MOZILL~1\FIREFOX.EXE -requestPending -osint -url "%1"
 ↓
[3144] Firefox.exe -requestPending -osint -url "http://www.google.co.jp/"

このように、Firefox 更新時は、ダイレクトに Firefox.exe で Web ページが表示されるのではなく、

一旦、終了し、Update.exe を呼び出し、再度、Firefox.exe を呼び出すような動作をしているようです。

この為、ShellExecute() は、1つめの Firefox.exe の呼び出しが失敗したと判断され、

ERROR_FILE_NOT_FOUND となってしまうのではないでしょうか。

<使用ツール>
■ Process Monitor v1.25
http://www.microsoft.com/technet/sysinternals/utilities/processm...
◎質問者からの返答

こんなに詳しく調べて頂いて、ありがとうございます。

DDE の登録が無効になるというより、DDE サーバーとして機能しなくなる為のようです。

'実際の Firefox は、以下のように引数に URL を指定している為、DDE を使わなくても URL はオープンされる。

「ShellExecuteは失敗しているのに、なぜちゃんとFirefoxは起動しているだろう?」と疑問だったのですが、これで納得できました。

どうもありがとうございました!


2 ● karate_kid001
●1ポイント

http://oubu-an.seesaa.net/article/13980777.html

◎質問者からの返答

え?と・・・・。

これは、どう関係しているのでしょう?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ