アプリケーションが起動しない。。。

とあるアプリケーション(WPFアプリ)がようやく出来あがったので、インストーラーを作成。試しに別のPCへインストールしてみたら、起動しない。。。

これがエラーメッセージを吐くでもなく、とにかく起動しない。タスクマネージャーで見ると、一瞬プロセスは現れるんだけど、すぐに消えてしまう。どうもウィンドウを表示する以前の問題っぽい。何台かのPCで試してみると、同じ現象のPCが複数ある。起動するPCもあるので何か条件はありそう。でもなぁ、エラーも出ないようだと処置なしである。

例外をログに書き出す

ウィンドウの表示前、もしくは途中でエラーになっていそうなので、例外を捕まえて書き出してみることにする。WPFアプリケーションが起動する時のイベントあったよなと、記憶をたどりつつ処理を追加してみる。

App.xaml.csOnStartup()をオーバーライドして、try~catchでメインウィンドウの表示処理を挟んで記述する。これでメインウィンドウの表示関係の例外は取り出せるはず。

protected override void OnStartup(StartupEventArgs e)
{
     // 実行ファイルと同じ名前、パスにログファイルを書き出す
     var fullPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
     var appPath = System.IO.Path.GetDirectoryName(fullPath);
     var fname = System.IO.Path.GetFileNameWithoutExtension(fullPath);
     var logFile = appPath + $@"{fname}.log";
    string appendText = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + Environment.NewLine;
     appendText += "-Start----------------" + Environment.NewLine;
     System.IO.File.AppendAllText(logFile, appendText);
     try
     {
         // メイン ウィンドウ表示
         MainWindow window = new MainWindow();
         window.Show();
     }
     catch (Exception ex)
     {
         appendText += "----------------------" + Environment.NewLine;
         appendText += "Text: " + ex.ToString() + Environment.NewLine;
         appendText += "----------------------" + Environment.NewLine;
         // log
         System.IO.File.AppendAllText(logFile, appendText);
     }
}

で、やってみたら見事にログが取れた。単に使っているDLLをインストーラーに入れ忘れていたのが原因。そりゃPCによって現象が出たり出なかったりする訳である。

しかし、なぜかメインウィンドウが2つ表示される

ログの処理を追加したら、なぜかメインウィンドウが2つ表示されるようになってしまった。OnStartUp()をオーバーライドしているのになぜ???

調べたらApp.xmlでメインウィンドウを指定してんだね。こことオーバーライドしたOnStartup()で2重にメインウィンドウを表示していたっぽい。

<Application x:Class="MyApp.App"           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml"
              StartupUri="Views/MainWindow.xaml">  ⇐ この行が原因この行を削って下のようにしてみたら解決。

<Application x:Class="MyApp.App"             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml">

あとはインストーラーを作り直したら解決だ。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です