0

私は次のような多くのフォーラムやリンクを読みました:

C#WinFormアプリケーションを再起動するにはどうすればよいですか?

しかし、これはすべてモバイル用ではなくウィンドウ用です。未処理の例外をキャッチしたときにモバイルアプリケーションを再起動するにはどうすればよいですか。未処理の例外をキャッチするとアプリが閉じますが、閉じたくないので再起動します。

これは機能しません:

ProcessStartInfo s = new ProcessStartInfo();
            s.FileName = Assembly.GetExecutingAssembly().GetName().CodeBase;
            s.UseShellExecute = false;
            Process.Start(s);

私はWindowsMo​​bile6.1とCF3.5を使用しています

4

2 に答える 2

4

WinMoには、アプリの複数のインスタンスが実行されないようにするメカニズムが組み込まれているため、Processクラスを使用して自分自身を呼び出すと、シェルが終了するインスタンスが起動するだけです。これを回避する必要があります。P/InvokeCeRunAppAtTimeを実行するか、アプリプロセスが常に実行されていることを確認する別のウォッチドッグプロセスを作成し、アプリがなくなったことを検出した場合は新しいインスタンスを起動しますCeRunAppAtTime。 11秒以上先なので、遅れが生じます。

于 2011-10-19T13:29:04.650 に答える
2

あなたはすべきではありません。最善のアプローチは、そもそもそれを引き起こすバグを修正して、その例外を防ぐことです。

ただし、クラッシュ以外の理由でアプリケーションを本当に本当に本当に再起動する必要がある場合は、アプリケーションと一緒にバックグラウンドで別のプロセスを開始して、アプリケーションがまだ実行されているかどうかを監視し、実行されていない場合は再起動することができますProcess.Start()。 t。

(アプリケーションがデバイス上で自動的に実行されるように設定されていて、デバイスがそれをサポートしている場合、これはWindows CEのものであるため、ほとんどありませんが、必要に応じて、ウォッチドッグタイマーを作成してデバイス全体を再起動することもできます。)

ただし、アプリケーションを常に(たとえば1日に1回)再起動すると、ユーザーエクスペリエンスとユーザーの信頼が損なわれます。したがって、代わりに例外を修正する必要があります。

于 2011-10-19T10:32:26.093 に答える