コードを変更して再デプロイできる場合:
- 新しいスタートアップクラス(Main()を使用するクラス)を作成します。プロジェクトのプロパティでそのクラスを選択していることを確認してください
- システム外部のスタートアップクラスからの「使用」および外部参照がないことを確認します
- 以前のスタートアップクラスのメインへの呼び出しの周りにtry/catchを置きます
例外とすべての内部例外をメッセージボックス(またはデバッグログ)に出力します
パブリッククラスMyNewEntryClass{
public static void Main(){
try{
MyPreviousEntryClass.Main();
} catch (Exception x){
Exception ix = x;
while (ix!=null){
MessageBox.Show("Exception: "+ix);
ix=ix.InnerException;
}
}
}}
編集:あなたの例外はメッセージハンドラーから来ているようです。上記のコード編集は、コードの外部からのイベントを処理するすべてのイベントハンドラーを含む、すべてのエントリメソッドに適用できます(適用する必要があります)。上記のクラッシュ画面は、非同期で実行されたコードであるさまざまなハンドラーの例外に対して表示される可能性があります。たとえば、非同期呼び出しを使用するボタンハンドラーには、クラッシュウィンドウが表示されないように、2つの試行/キャッチが必要です。
private void Button_Clicked(object sender, EventArgs arg){
try{
Action<string> asyncCall = (s)=>{
try{
//...exception here will cause crash
// as it's not handled in Button_Clicked
} catch (Exception xOnAsyncThread){
}
};
asyncCall.BeginInvoke("outahere",null,null);
} catch (Exception xOnUIThread){
}
}
上記のステートメントは、Windowsメッセージ処理にも当てはまります。これは、外部イベントの単なる別のイベントハンドラーです。
コードを変更して再デプロイできない場合は、 Sysinternals Process Monitorを使用してください:
http ://technet.microsoft.com/en-us/sysinternals/bb896645
アプリを監視し、ファイルが見つからないイベントを強調表示するように構成します(詳細については、ドキュメントを参照してください)。 )。
ProcessMonitorが多すぎる場合は、例外メッセージからすべてのコンテンツをコピーして除外します-ロードされたものは問題ではありません