2011-07-19 8 views
2

私のアプリは私のマシンで動作します。しかし、別のユーザー(彼のマシンでもそれを使うことができるユーザー)は、サーバーマシン上で彼にとってはうまくいかないと言っています。しかし、サーバーは単に「プログラム名が動作しなくなった」と言っています。そこ「ビュー問題の詳細」コマンドがありますが、それは十分な私に教えてくれない:Main()私のアプリが「機能しなくなった」理由を調べるには?

Problem signature: 
    Problem Event Name:      CLR20r3 
    Problem Signature 01:      programname.exe 
    Problem Signature 02:      0.0.0.0 
    Problem Signature 03:      4e20a786 
    Problem Signature 04:      mscorlib 
    Problem Signature 05:      2.0.0.0 
    Problem Signature 06:      4d8c1599 
    Problem Signature 07:      f9b 
    Problem Signature 08:      80 
    Problem Signature 09:      System.IO.FileNotFoundException 
    OS Version:           6.1.7600.2.0.0.16.7 
    Locale ID:            1033 

非常に最初の行は、スタックトレースを持つウィンドウを表示するようになっている「未処理の例外ハンドラ」をインストールしてください。それまではうまくいった。

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.Automatic); 
Application.ThreadException += ShowUnhandledException; 

コールスタックを取得する方法はありますか。 P.S.私は次の時間にそれを必要とします;)

+0

外部ファイルを読み込んでいますが、間違いを確認していませんか? –

+0

私が知っているわけではありません。 – Qwertie

+0

System.IO。FileNotFoundExcdeptionは、SOMETHINGが探し出されたことを示します。おそらく、外部の.dllが暗黙的に読み込まれており、友人のマシンにインストールされていません。 –

答えて

1

私のインストーラプログラム(MSI)はある時点で壊れていて、プログラムで使用されている7個のDLLのうち2個は含まれていませんでした。

DLLが依存関係をオンデマンドでロードし、UIスレッドのみが実行されていたため、DLLがなくても.NETがMain()を呼び出す必要があります。しかしそれが修正されたので、それ以上調査するつもりはありません)。

1

新しいプロジェクトを作成します。実際のプロジェクトへの参照を追加します。あなたのアプリケーションでは、Assembly.Load( "..")メソッドを使って他のプロジェクトをロードすることができます。これはtry..catchブロックで行うことができます。 CLRはJITをコンパイルしているので、あなたの新しいアプリが起動するはずです(間違っていることが問題の特定のアプリに固有ではなく、デフォルトのプロジェクト設定と関係ない場合を除く)。スタックトレースは、他のスタックトレースを失敗させる原因となります。これを何らかの形で(ファイル、電子メール、db)取り込み、他のユーザーがあなたにこの出力を得るようにしてください。

少なくとも私の理論です。私はこれをテストし始めないプログラムはありません。少なくともあなたが与えた時間枠ではない。

PS ==>ラッパーアプリが起動しない場合は、簡単な「Hello world」コンソールアプリを作成して起動するかどうかを確認してください。異なる.NETフレームワークを対象にしてください。これらの小さなアプリをいくつか作成して、さまざまな設定をテストします。おそらくあなたは64ビットプラットフォームをターゲットにしており、サーバーは32ビットですか?

編集:プロジェクト参照を実行可能なアセンブリに追加すると、2番目のアセンブリのビルドを含む.exeファイルが作成されないため、この作業を行う方法がわかりません。あなただけの他のインストール...

3

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.Automatic)からファイルシステムから実行可能ファイルをロードする必要がありますようにそうに見えます。

これは、UIスレッドで実行されるイベントハンドラのために発生する例外のみを捕捉して表示します。 AppDomain.CurrentDomain.UnhandledExceptionは、ワーカースレッドでコードがクラッシュしたときに実行されるイベントの代わりに使用されません。

しかし、あなたが投稿したトレースは、別の問題を引き起こす可能性があります。コードが起動する前にクラッシュする可能性があります。 System.IO.FileNotFoundExceptionは、適切なバージョンの.NETがクライアントマシンにインストールされていることを確認しなかったときに発生する例外です。セットアップと展開のプロジェクトを簡単に処理できます。またはWindows Updateを有効にするように友だちに依頼する。

+0

正しいフレームワークがないということは私の提案でもあり、UIが表示されなくてもアプリケーションが即座にクラッシュする原因になります。 – slugster

関連する問題