DOBON.NET DOBON.NETプログラミング掲示板過去ログ

アプリケーション起動時に画面が表示されない

環境/言語:[WindowsXP VS2003]
分類:[.NET]

本掲示板には毎回お世話になっております。

今回私の方では検討もつかない事象が発生してしまったので
記述させていただきます。

VB.NET(VS2003)で作成したフォームアプリケーション(exeをキックすると
画面が表示される)をDELL製のPCで起動したところ、たまに画面が表示されない
事象が発生しました。

PCに電源を入れてアプリケーションを起動したら、画面が表示されず
おかしいと思い、タスクマネージャを参照したら当アプリケーション名
が表示されていたので、アプリケーションを強制終了し、再度起動しても
画面は表示されませんでした。
電源を再起動したら正常に起動しましたが、たまに上記の事象が発生してしまい
何が原因なのかまったくの不明です。
Windowsのサービスが起動していないのかと思い、異常時と正常時のサービスの
状態を比較しても特に違いはありませんでした。

もしみなさんの中で上記事象に出会った方がいましたら、原因と対処方法
を教えていただけないでしょうか?
また思いつくことがありましたら何でもいいのでアドバイスして頂けると
助かります。

ちなみに.NET フレームワークのバージョンは1.1です。

よろしくお願いいたします。
> ちなみに.NET フレームワークのバージョンは1.1です。

  サービスパックの適用はさておき・・・
  Form_Loadで何か特殊な処理を行っているとか。もしくは
  Sub Mainからの起動で何か前処理してからフォーム表示
  させているとか・・・

  それらの処理の内容によっては、遅い?CPUとか搭載
  メモリの都合とかで、おかしくなってしまっている?

  後は最悪、そのマシンに異常があり、.Netが正常に動作
  しにくい状況にあるとか・・・

  OSの再インストール・.NET Frameworkのランタイムの
  再インストールとか・・・

以上。参考まで
2009/03/24(Tue) 09:25:29 編集(投稿者)

例えば、ログを出力するバージョンのexeを作って動作検証をするなど、
まずは現象を正確に抑えるのが先じゃないかと思います。

また、他のPCでは一切発生しないのでしょうか?
そのPCで発生する頻度はどのくらいなんでしょうか?
1回目は正常に起動できて、2回目以降がダメなんでしょうか?

まずは再現性を確保するところからはじめましょう。

> Windowsのサービスが起動していないのかと思い、異常時と正常時のサービスの
> 状態を比較しても特に違いはありませんでした。

何かのサービスに明示的に依存しているのでしょうか?
その可能性を疑うような明確な理由(○○コンポーネントを使っているetc)が
あるなら、そういう情報は質問時に明記した方がよいですね。

> PCに電源を入れてアプリケーションを起動したら、画面が表示されず
> おかしいと思い、タスクマネージャを参照したら当アプリケーション名
> が表示されていたので、アプリケーションを強制終了し、再度起動しても
> 画面は表示されませんでした。

起動時に必要なファイルがないとか、レジストリの設定がないとか、
何らかの起動条件が満たせていないのではないでしょうか。

あるいは例外が発生しているのに握りつぶしていて、
画面だけ表示されていないとか、現状の話を聞く限りは
アプリケーションの起動時処理、画面の表示前処理、
あるいは、アプリケーションの終了処理にバグがあるように想像されます。
> ちなみに.NET フレームワークのバージョンは1.1です。


初めて投稿(返信)させていただきます、denbiと申します。
本事象に思い当たるところがありますので質問をいたします。

アプリ起動時に、XMLSerializerでXMLファイルからアプリの設定などを読み込んでいますか?
もしそうであれば、

XMLSerializer クラスを使用する、.NET Framework ベースのアプリケーションが、アジア版の Windows XP でアプリケーションを実行すると応答を停止します。
http://support.microsoft.com/default.aspx?scid=kb;ja;903204

に該当しているものと思われます。
当時の私の解決策は、コマンドプロンプトのウィンドウを非表示にて生成しすぐ終了することで、IMEを先に起動して回避しました。
ただ、この方法もマルチスレッド周りと干渉し更なる不具合を起こしていたと記憶しています。(詳細は失念しました。すみません。)
以上、ご確認ください。
すいません。補足させてください。リンク先の情報では自動翻訳のせいかわかりにくいので。

XMLを読み込み解析する際にアジア版XPはロケールを適用します。これがIMEを読み込む理由です。
起動直後のOSにはIMEが読み込まれていない為、IMEを読み込みますが、デッドロックします。

回避例:XMLの読み込み前に隠しコマンドプロンプトを起動する。
(C#ですが、VBでも同等のことは出来ると思います)
//http://support.microsoft.com/default.aspx?scid=kb;ja;899153 対策
ProcessStartInfo prcInfo = new ProcessStartInfo("cmd.exe");
prcInfo.CreateNoWindow = true;
prcInfo.Arguments = "/C exit";
prcInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process prcCmd = Process.Start(prcInfo);
みなさん色々記述して頂いてありがとうございます。

オショウ様

>Form_Loadで何か特殊な処理を行っているとか。もしくは
>Sub Mainからの起動で何か前処理してからフォーム表示
>させているとか・・・
とくに特別な処理は行っていません。
ただプロセス間のメッセージ送受信するためにMessageQueを使用しています。

よねKEN様

>例えば、ログを出力するバージョンのexeを作って動作検証をするなど、
>まずは現象を正確に抑えるのが先じゃないかと思います。
ログを出力する仕組みは実装しています。
ただ、フォームロード時にもログを出力していますが、ログはまったく出力
されていない状態です。少しでもログが出力されていれば
どの処理が悪いのか特定できそうなのですが・・・

>また、他のPCでは一切発生しないのでしょうか?
>そのPCで発生する頻度はどのくらいなんでしょうか?
>1回目は正常に起動できて、2回目以降がダメなんでしょうか?
発生しているPCの型だと発生しています。
他の型のPCだと現状発生していません。
今回の事象が発生するとOSの再起動をしない限り、
何度exeを実行しても本事象が発生してしまいます。

>何かのサービスに明示的に依存しているのでしょうか?
>その可能性を疑うような明確な理由(○○コンポーネントを使っているetc)が
>あるなら、そういう情報は質問時に明記した方がよいですね。
メッセージキューのコンポーネントをインストールしています。
ただし、事象が発生したときもサービスは正常に起動しています。

denbi様

>アプリ起動時に、XMLSerializerでXMLファイルからアプリの設定などを読み込んで>いますか
XMLSerializerについては詳しくないのではっきり答えられませんが、
特に使用していません。
XMLSerializerとMessageQueに関連はあるのでしょうか?

>XMLを読み込み解析する際にアジア版XPはロケールを適用します。これがIMEを読み>込む理由です。
>起動直後のOSにはIMEが読み込まれていない為、IMEを読み込みますが、デッドロッ>クします。
指摘していたたいた内容を現在勉強中ですが、たとえば、スタートアップに
バッチファイル等を格納し、cmd.exeを実行するようにすれば回避できるのでしょうか?
それともアプリケーションを起動する度に実行しなければいけないのでしょうか?


現状まだ解析できていない状態なのでまた何かありましたら
ご指摘していただけると助かります。
申し訳ございませんがよろしくお願い致します。
> >アプリ起動時に、XMLSerializerでXMLファイルからアプリの設定などを読み込んで>いますか
> XMLSerializerについては詳しくないのではっきり答えられませんが、
> 特に使用していません。
> XMLSerializerとMessageQueに関連はあるのでしょうか?

XMLSerializerとMessageQueの関連についてはわかりません。どんな実装かわからないので。

microsoftで公開されている不具合(私が該当の可能性を指摘した不具合)は、
簡単にいうと、IMEを一度も起動しないままでXMLを扱うとデッドロックしますよってことです。
DOBON.NET > プログラミング道 > .NET Tips > その他のTips「アプリケーション構成ファイル」を使用して設定を読み込む
で書かれているアプリケーション構成ファイルもXMLなのでデッドロックの可能性があります。


まずは停止する箇所の特定を行ったほうがよいと思います。
ログは書き出せるようなので、起動直後から一行のコードが進むたびにログが書き出されるようにしてしまってはいかがですか?フォームロードの時点からです。
ステップ毎に書き出すようにして、ログが書き出された箇所は通過出来たわけですから、シロになります。

ログがまったくでないとのことですが、ログ書き出しクラスは書き出されるログを受け取ったらすぐにファイルに書き出していますか?オンメモリに貯めて後で書き出す実装の場合、応答不能に陥った際に貯めていた書き出すログが出ない場合があります。



> >XMLを読み込み解析する際にアジア版XPはロケールを適用します。これがIMEを読み>込む理由です。
> >起動直後のOSにはIMEが読み込まれていない為、IMEを読み込みますが、デッドロッ>クします。
> 指摘していたたいた内容を現在勉強中ですが、たとえば、スタートアップに
> バッチファイル等を格納し、cmd.exeを実行するようにすれば回避できるのでしょうか?
> それともアプリケーションを起動する度に実行しなければいけないのでしょうか?

このXMLがらみの不具合の場合は、IMEが先立って起動すればよいので
スタートアップバッチでもOKです。
microsoftの対応も意味は同じです。

ためしに、OS起動後にメモ帳を開き、日本語を入力して、問題のプログラムを動かすことを何度か試してみてください。
これを行って、停止の頻度が変わらない場合、XMLがらみではない可能性が高いです。
何度試しても、停止しない場合はXMLがらみの可能性ありです。
> XMLSerializerとMessageQueの関連についてはわかりません。どんな実装かわからないので。

  .NETでシステムサービスいくつも作ってますが、アプリケーション構成
  ファイルやXMLSerializerでトラブッたことはありません。

  ただし、user.configファイルが破損してしまう事象には遭遇しており
  その回避策も構築はしていますが・・・

  それよりMessageQueの方でいろいろ問題がある・・・と聞いたことが
  あります。が私はMessageQueが使ったことが無いので信憑性は未確認
  です。

※ 起動できないPCのそのアプリのuser.configファイルが壊れていない
  か確認されては?

  あくまで参考まで・・・

以上。
denbi様、オショウ様回答の方ありがとうございます。
教えていただいたことを元に解析を実施してみたいと思います。

実施した結果も後で報告したいと思います。

他に考え付くことがありましたら教えていただけると助かります。
よろしくお願いいたします。
■No24297に返信(zonoさんの記事)
> denbi様、オショウ様回答の方ありがとうございます。
> 教えていただいたことを元に解析を実施してみたいと思います。
>
> 実施した結果も後で報告したいと思います。
>
> 他に考え付くことがありましたら教えていただけると助かります。
> よろしくお願いいたします。
>

denbi様およびオショウ様に教えて頂いたことを実施してみましたが、
解決に至りませんでした。

ただPCを調べたところ、ドライバで『ATI Catalyst Control Center』
がインストールされていて、事象が発生したときは起動していないように
思えます。

ネットで調べたところ、.NET FrameWorkが必要とあるのですが、
2.0をインストールするとあります。

環境上1.1から変更できないので、1.1に対応した『ATI Catalyst Control Center』
はあるのでしょうか?

現状のPCに添付されているドライバからダウングレードできればと思っていますが・・・

また何か『ATI Catalyst Control Center』関連で思い当たることがありましたら
教えて頂けると助かります。

よろしくお願い致します。
> 環境上1.1から変更できないので、1.1に対応した『ATI Catalyst Control Center』
> はあるのでしょうか?

  私のDELLのノートPCは、MOBILITY RADEON 9000 なので・・・
  ATI CATALYST ControlCenter は、お探しのバージョンです。

  因みに、ATI CATALYST ControlCenter v1.2.2006.286
  で、.NET Framework 1.1.4322.2407 です。

  しかしながら、これ・・・
  随分探し回ってダウンしてきたものなので、現在の入手可能か
  どうかは解りません。

  ディスプレイカードのメーカー・型式・チップ等で探されては?

以上。
追伸・・・

http://support.amd.com/us/gpudownload/Pages/radeon-prer300-xp.aspx

まだダウンロードできるようです。
ファイル名も同じでした・・・

よって後は、ご使用のカードの型式だけですネ!

以上。
■No24376に返信(オショウさんの記事)
>>環境上1.1から変更できないので、1.1に対応した『ATI Catalyst Control Center』
>>はあるのでしょうか?
>
>   私のDELLのノートPCは、MOBILITY RADEON 9000 なので・・・
>   ATI CATALYST ControlCenter は、お探しのバージョンです。
>
>   因みに、ATI CATALYST ControlCenter v1.2.2006.286
>   で、.NET Framework 1.1.4322.2407 です。
>
>   しかしながら、これ・・・
>   随分探し回ってダウンしてきたものなので、現在の入手可能か
>   どうかは解りません。
>
>   ディスプレイカードのメーカー・型式・チップ等で探されては?
>
> 以上。

オショウ様回答の方ありがとうございます。

入手困難ですか・・・探してみます

ちなみに.NET FrameWork1.1と2.0を共存することでVS2003で作成した
プログラムに影響はあるのでしょうか?

度々の質問で申し訳ございません。
> ちなみに.NET FrameWork1.1と2.0を共存することでVS2003で作成した
> プログラムに影響はあるのでしょうか?

  共存できます。
  v1.0 と、v1.1 の場合は下位互換で若干の差異のある
  機能があったと記憶しますが、v2.0とv1.1ならば問題
  ない(はず)です。

※ ATIのはダウンできますヨ!

以上。
■No24377に返信(オショウさんの記事)
> 追伸・・・
>
> http://support.amd.com/us/gpudownload/Pages/radeon-prer300-xp.aspx
>
> まだダウンロードできるようです。
> ファイル名も同じでした・・・
>
> よって後は、ご使用のカードの型式だけですネ!
>
> 以上。

とりあえず現状の状態で.NET FrameWorkをインストールしてみたところ、
問題の事象が再現してしまいました。

今度はカードに対応したATIをインストールする方法を試してみようかと
思いますが、PCが手元にない為、現状分かるのがPCの型だけです。
(optiplex 755)

これだけの情報で.NetFrameWork1.1に対応したATIを探し出すことはできる
でしょうか?

何度も申し訳ございません。
> 今度はカードに対応したATIをインストールする方法を試してみようかと
> 思いますが、PCが手元にない為、現状分かるのがPCの型だけです。
> (optiplex 755)
>
> これだけの情報で.NetFrameWork1.1に対応したATIを探し出すことはできる
> でしょうか?

  私もうまく動作するものを見つけるまでに3回ほど
  入れなおししました。

  ATIのドライバーもそうですし、VisualStudioもです。

  DELLのPCですので、本体添付のCDにATIの
  ドライバー一式入っているはずですが、それがダメだ
  ったのでしょうか?

  私はたまたまATI関連のGPUの開発を行う必要が
  あったので、ドライバーのバージョン更新したらこの
  問題に遭遇しました。一度バージョンをアップさせて
  しまうとバージョンダウンさせるのが結構困難・・・

  レジストリや各種ファイルを手動で消さないといけな
  い場合もありますので。

  結果的には自己責任となりますので、PCの環境バッ
  クアップは行ってからドライバー更新されるのがよい
  かと思います。

  何はともあれ試行錯誤しかないかと。

※ 空き時間に何か解ればまたカキコします。

以上。
■No24404に返信(オショウさんの記事)
>>今度はカードに対応したATIをインストールする方法を試してみようかと
>>思いますが、PCが手元にない為、現状分かるのがPCの型だけです。
>>(optiplex 755)
>>
>>これだけの情報で.NetFrameWork1.1に対応したATIを探し出すことはできる
>>でしょうか?
>
>   私もうまく動作するものを見つけるまでに3回ほど
>   入れなおししました。
>
>   ATIのドライバーもそうですし、VisualStudioもです。
>
>   DELLのPCですので、本体添付のCDにATIの
>   ドライバー一式入っているはずですが、それがダメだ
>   ったのでしょうか?
>
>   私はたまたまATI関連のGPUの開発を行う必要が
>   あったので、ドライバーのバージョン更新したらこの
>   問題に遭遇しました。一度バージョンをアップさせて
>   しまうとバージョンダウンさせるのが結構困難・・・
>
>   レジストリや各種ファイルを手動で消さないといけな
>   い場合もありますので。
>
>   結果的には自己責任となりますので、PCの環境バッ
>   クアップは行ってからドライバー更新されるのがよい
>   かと思います。
>
>   何はともあれ試行錯誤しかないかと。
>
> ※ 空き時間に何か解ればまたカキコします。
>
> 以上。

オショウ様毎回回答して頂いてありがとうございます。
捕捉情報ですが、今回の事象が発生した時、再起動を行うと以下のメッセージ
を通知するダイアログが必ず表示されます。

『.NET-BroadcastEventWindow.1.0.5000.0.4 このプログラムは応答していません』

これも関連があるのでしょうか?
> 『.NET-BroadcastEventWindow.1.0.5000.0.4 このプログラムは応答していません』

  私の環境でも発生します。
  毎回(100%)ではありませんが・・・

  デルのノートPCではなく、デスクトップPCです
  ショップブランドで・・・
  Core2Quad 2.84GHz 4GB メモリ
  Vista Ultimate SP1 でです。

  ATIグラフィックボードではありません
  NVIDIAです・・・

以上。
■No24406に返信(オショウさんの記事)
>>『.NET-BroadcastEventWindow.1.0.5000.0.4 このプログラムは応答していません』
>
>   私の環境でも発生します。
>   毎回(100%)ではありませんが・・・
>
>   デルのノートPCではなく、デスクトップPCです
>   ショップブランドで・・・
>   Core2Quad 2.84GHz 4GB メモリ
>   Vista Ultimate SP1 でです。
>
>   ATIグラフィックボードではありません
>   NVIDIAです・・・
>
> 以上。

『.NET-BroadcastEventWindow.1.0.5000.0.4 このプログラムは応答していません』
が出力されることをdellのサポートに問い合わせたところ、最新のATIを
インストールすればOKと言われ、インストール後しばらく監視していましたが
今回の事象は発生しませんでした。
(ただし、最新のドライバをインストールする時に、.Net FrameWork2.0を
 インストールしないといけませんでした。。。)

オショウ様がおっしゃった通り、ATIのドライバが原因だったと思います。
色々御協力して頂いてありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板