2009年07月26日

CE Setup DLL

今日はちょっとプログラミングの話を。
インストーラでカスタム動作を行うためのSetupDLLについてです。
先日、MoonClockをバージョンアップしましたが、これは、S21HTという機種でインストールに失敗するという連絡をいただいたからです。
インストール失敗というか、インストールの最後でウェイトアイコンがグルグル状態のままになるみたい。
手持ちの環境ではまったく発生しないのですが、症状から原因と考えられるのは、CE Setup DLL でやっているToday画面を強制更新する処理。

実は、WMには外部からToday画面を強制更新するAPIは用意されていないんです。
で、よく使われるのが下記の方法。
::SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0xF2, 0);
WM_WININICHANGEメッセージをブロードキャスト(すべてのTOPレベルウィンドウへ送信)することで、Today画面を強制更新するわけです。
結構古くから広く使われている方法で、検索すると、たくさんヒットします。
テーマチェンジャなんかにも使われているみたい。
正式な方法ではないとしても、信頼性・安定性は十分に高いと判断してました。

でも、今回の症状をみると、こいつが怪しいじゃないかと考えられるんです。
MoonClockでは、インストール完了時と、アンインストール開始時に、無条件にこいつを呼んでます。
アンインストール開始時には、レジストリを調べてMoonClockがTodayに表示されている場合だけ呼べばいいんですが、これを無条件に呼んでいるのは、誰かがレジストリだけ書き換えちゃうと正しい判定が出来なくなるから。
ちょっと考えすぎな気もしますが、安全側に振ることを考えると、無条件に呼んでおくべきと判断したわけです。

ところが、WM_WININICHANGEメッセージをブロードキャストする方法で固まる環境があるとすると、話は変わってきます。
インストールもアンインストールも、必ず固まることになってしまう。
固まるといっても、相手からの応答を待っているだけで、暴走しているわけではないんですが。

でも、返事がないってことは、メッセージを受け取った相手側がおかしくなっちゃてるんじゃないかっていう心配があります。
調べて見たら、こんな記事がありました。

Sending WM_WININICHANGE message on device with HTC TouchFlo 3D will crash the device

信憑性は定かではないですが、TouchFLO 3D が動いている環境で WM_WININICHANGEメッセージをブロードキャストすると、デバイスがクラッシュするというのです。
俄かには信じ難いんだけど、可能性がある以上、何らかの対策をしなければなりません。
まあ、これが本当だとすると、メッセージを送られてクラッシュするアプリも修正したほうがいいとは思いますが、そうも言ってられません。
そこで、インストーラの安全対策を見直すことにしました。

  • レジストリをみて、MoonClockが表示されている場合だけWM_WININICHANGEを送信する。
  • ブロードキャストをやめて、GetDesktopWindow APIで取得したToday画面ウィンドウにのみ送る。
  • メッセージ送信時タイムアウトの導入。

これらの対策を施した、SetupDLLのソースコード(C++) を晒してみます。
手持ちの環境では問題なく動いていますが、まだ改善の余地があるかもしれません。
情報をお持ちの方がいらっしゃいましたら、何かコメントでお知らせください。
posted by ZORAC at 23:29| Comment(52) | TrackBack(0) | プログラミング
この記事へのコメント
自分も、この症状で困ってます。
といっても、自分の環境では発生しないので検証しようがないのですが。

3つ目のタイムアウト、
SendMessageTimeout( HWND_BROADCAST,
  WM_WININICHANGE, 0xF2, 0, 0, 10*1000, &dwResult);
こんな感じでやってるんですけどね、これでもダメのような…
2つ目のTodayのみにメッセージを送るパターンも、TouchFLOを含むことになるので、あまり効果がないような気もしますし。

ブロードキャストでSendMessage自体、危険な処理にも思えるのですが、どうなんでしょうねぇ。

とりあえず、自分はこんな感じで処理しています。
●アンインストール
直後にインストールが走る場合があるので、Sendのタイムアウトあり
●インストール
インストール後は後に処理が続かないので、Postにして固まらないように

と、しているのですが、どうも駄目な環境があるようです。(そもそも、TouchFLOにメッセージが通知されること自体がダメのような感じ?)

TouchFLOがある時は、更新処理の自動化をあきらめるというのが、いいような気がしてきました。逃げですが。
メッセージボックスを出して、「Todayの設定にて等プラグインを有効にしてください」ってな感じに。
Posted by じゅんたろ at 2009年07月27日 21:00
連続ですみません。

PocketDigitalClockのソース公開されているので、SetUpDllをチェックしてみたのですが、
SendMeesageになってました。

他に、SetUpDllのソース、公開されてないですかねぇ。
Posted by じゅんたろ at 2009年07月27日 21:04
>じゅんたろさん
ども。

うちでも症状が出ないんですよねぇ。
やっぱり、じゅんたろさんとこも、問題が出てるのは、TouchFLO搭載機ですか?

実は、今回の修正をするときに、最初はTouchFLO 3D がEnableの場合は自動化しないように直したんですよ。
でも、症状が発生している方からの情報では、TouchFLO 3D はOFFだったというので、TouchFLO 3Dを特別扱いしないで、すべての環境でより安全側になるように修正しなおしたんです。

これで駄目なら、
・SendMessageをやめて、PostMessageにする。
SendMessageがまずいのであれば、これで直るはず。

それでも駄目なら、
・TouchFLO 3D インストール環境なら(Enable=0でも)、自動処理はしないでメッセージを出す。
これは、TouchFLO 3D 環境だけに問題があると判断できた場合の対応。
ってな方向で考えてます。

PostMessageにする場合は、以下のようになると思います。

インストール完了時をSendMessageにしているのは、タイムアウトで確実に手動ON指示メッセージを出すためだけなので、
1.PostMessage実行
2.直後に『自動表示されない場合は、設定画面を開いてください』みたいなメッセージを表示。
という方向でいけると思います。

アンインストール時はアンロードされるまで待たなければいけないので、以下のようになると思います。
1.PostMessage実行
2.dllファイルを排他書き込みモードでオープンしてみる。
3.オープンに成功するまで、Sleep(500)を挟みながら2を繰り返す。

Todayが表示されている(dllがロードされている)間は、排他書き込みモードではオープン出来ないんじゃないかという推測に基づいています。
時間がなくて、うまくいくか検証はしてないですが。
Posted by ZORAC at 2009年07月28日 00:14
どーもです。
機種ごとに事例をまとめているわけではないのですが、S21HT等、Touch Diamond系がよく目についていたような気がします。
 ただ、EM-ONEでもインストール時のくるくるが止まらないという話も聞いたことがあるので、原因が突き止められていない状態ですね。(今回の記事とは関係ないことが原因の可能性もあり)

 あと、S21HTでも正常にインストールできているというコメントもいただいているのですが、フルフォーマット後、ある操作を行うことでTouchFLOのインストールをキャンセルできるらしくて、環境の絞り込みが難しいです。実機が手元にあれば、いろいろと実験できるんですけどねぇ。
Posted by じゅんたろ at 2009年07月29日 23:26
>じゅんたろさん

ども。
情報ありがとうございます。

やっぱり、症状が発生する実機がないとこれ以上は厳しいですよね。
今回の対応で安定してくれるといいんだけど。

ネットで調べても、WM_WININICHANGEを使う方法は2003年ごろから紹介されてるし、こちら側では消極的な方法をとるしかないのかも。
最近は、WM_SETTINGCHANGEを使っている記事も見るけど、少なくともWM5/6ではこれは同じものだし。
(#define WM_SETTINGCHANGE WM_WININICHANGE って定義されてる)
まあ、新しいアプリはWM_SETTINGCHANGE使えってことだから、ソースの表記上は、WM_SETTINGCHANGEってすべきだったけど。

情報が集まるまで様子を見るしかないかな。
Posted by ZORAC at 2009年07月30日 00:09
Posted by eTETiwbiRSXfroKsis at 2011年03月17日 06:25
http://www.insurersonline.net/ auto insurance ioct http://www.insurersearch.net/ cheap health insurance 473338
Posted by NvkktzeS at 2011年04月02日 03:29
Posted by XYzhKTYAQYAZGsV at 2011年04月10日 10:36
Specialists tell that credit loans help a lot of people to live the way they want, because they can feel free to buy necessary goods. Furthermore, a lot of banks offer short term loan for all people.
Posted by loan at 2011年07月01日 06:12
aymukm [url=http://qviagra.eu/]viagra online[/url] >:-[ [url=http://qcialis.eu/]cialis[/url] 8]]] [url=http://qviagra.fr/]viagra[/url] >:-OOO [url=http://qviagra.it/]compra viagra[/url] >:-OOO [url=http://qcialis.it/]cialis[/url] vyUor [url=http://qcialis.fr/]cialis[/url] 6472
Posted by viagra online at 2012年02月04日 08:13
txvybeil [url=http://qcialis.fr/]cialis[/url] :-O [url=http://qcialis.eu/]cialis[/url] 8]]] [url=http://qviagra.fr/]viagra en ligne[/url] FyqrJg [url=http://qviagra.eu/]viagra[/url] gRAIw [url=http://qcialis.it/]cialis online[/url] >:-[ [url=http://qviagra.it/]viagra online[/url] 6387
Posted by cialis at 2012年02月04日 08:14
Posted by viagra vs cialis at 2012年02月09日 19:12
qwpqkb [url=http://baratopilulas.eu/pedido-generic-cialis-soft-tabs-online-pt.html]cialis[/url] >:-OOO [url=http://ukcheappharmacy.co.uk/]buy viagra online[/url] 0408 [url=http://farmacia-abuonmercato.it/]comprare viagra[/url] kygDZ [url=http://cialis-vs-viagra-vs-levitra.com/]cialis[/url] >:]] [url=http://billige-tabletten.be/kamagra.html]kamagra[/url] eWUmd [url=http://pilulesfr.fr/]viagra[/url] %-[[[
Posted by cialis at 2012年02月09日 19:12
ybeyirbc [url=http://fastuspaydayloans.com/]payday loans[/url] 0855 [url=http://fastpaydayloansus.com/]payday loans[/url] 1112 [url=http://fastpaydayloanscanada.ca/]Payday Loan[/url] 5105 [url=http://onlineukpaydayloans.co.uk/]Online UK Payday Loans[/url] 4646
Posted by payday loans at 2012年02月20日 23:50
mlxrmnxu [url=http://fastpaydayloanscanada.ca/]Payday Loan[/url] XlEMUX [url=http://fastuspaydayloans.com/]payday loans[/url] gaBfS [url=http://fastpaydayloansus.com/]payday loans[/url] >:-OOO [url=http://onlineukpaydayloans.co.uk/]Payday Loans UK[/url] >:-OOO
Posted by Payday Loan at 2012年02月20日 23:50
Hello! feadefd interesting feadefd site! I'm really like it! Very, very feadefd good!
Posted by Pharme140 at 2012年02月21日 04:40
Very nice site! <a href="http://oieypxa.com/kyxqtk/1.html">cheap viagra</a>
Posted by Pharma60 at 2012年02月21日 04:41
Perfect!
Posted by phentermine at 2012年02月28日 22:41
Good site,
Posted by female_viagra at 2012年02月29日 19:37
Sorry but,
Posted by zolpidem at 2012年03月02日 03:57
Aloha!
Posted by adipex at 2012年03月05日 16:42
Hi there!
Posted by adipex at 2012年03月06日 17:51
Perfect!
Posted by klonopin at 2012年03月07日 19:23
Hello!
Posted by adipex at 2012年03月11日 21:04
Hi there!
Posted by adipex at 2012年03月13日 17:53
Good site,
Posted by vimax at 2012年03月14日 22:29
Hi there!
Posted by prednisone at 2012年03月15日 21:42
Hello!
Posted by viagra at 2012年03月16日 01:01
Apr&#232;s avoir fait face une course tr&#232;s difficile et &#224; surmonter tous les obstacles dans <a href="http://www.supra-shoes-prix.net" title="supra shoes prix">supra shoes prix</a> la course, Lewis Hamilton a accompli une autre victoire au Grand Prix de Monaco.
Posted by supra shoes prix at 2012年03月16日 17:12
Perfect!
Posted by adipex at 2012年03月17日 19:07
Sorry but,
Posted by albenza at 2012年03月18日 18:19
Aloha!
Posted by viagra at 2012年03月19日 17:33
Posted by levaquin at 2012年03月20日 15:17
Sorry but,
Posted by klonopin at 2012年03月22日 01:01
Hello!
Posted by cialis at 2012年03月23日 14:07
Hi there!
Posted by vimax at 2012年03月24日 18:57
Perfect!
Posted by ambien at 2012年03月26日 23:57
Perfect!
Posted by viagra at 2012年03月29日 21:48
Aloha!
Posted by xanax at 2012年03月31日 19:22
Perfect!
Posted by vigrx at 2012年04月01日 16:28
Hi there!
Posted by phentermine at 2012年04月02日 03:46
Aloha!
Posted by ambien at 2012年04月17日 20:41
Hello!
Posted by cialis at 2012年04月26日 23:42
My dear ,for the hurt you sought to do me was is your good opinion.
Posted by Air Jordan Jumpman at 2012年05月04日 18:38
Good site,
Posted by xanax at 2012年05月05日 21:57
Good site,
Posted by phentermine at 2012年05月07日 01:24
Hi there!
Posted by viagra_online at 2012年05月07日 21:27
The grass withers, the flower fades, when the breath of the LORD blows u pon it; surely the people are grass. The grass withers, the flower fades ; but the word of our God will stand forever.
Posted by adidas originals js wings denim without wing at 2012年05月16日 09:24
Sorry but,
Posted by phen375 at 2012年05月17日 02:17
Aloha!
Posted by fungal at 2012年05月18日 19:25
Sorry but,
Posted by penis_enlargement at 2012年05月18日 23:07
Hallelujah! For the Lord our God the Almighty reigns. The kingdom of the world has become the kingdom of our Lord and of his Messiah, and he wil l reign forever and ever.
Posted by Glow In The Dark Shoes at 2012年05月19日 10:23
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/30845796
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック