2011-10-19 59 views
0

我看了很多論壇和類似鏈接:如何重新啓動我的C#移動應用程序?

How do I restart my C# WinForm Application?

但是這一切都是不移動窗口。當我發現未處理的異常時,如何重新啓動我的移動應用程序。現在應用程序已關閉,當我發現未處理的異常,但我不想關閉它,所以我想重新啓動它。

這不工作:

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

我正在uisng Mobile 6.1的Windows和CF 3.5

回答

4

WinMo有一個機制可以阻止應用程序的多個實例運行,因此使用Process類調用您自己可以簡單地啓動一個shell終止的實例。您必須work around that,P/Invoke CeRunAppAtTime或創建一個單獨的監視程序進程,以確保您的應用程序進程始終在運行,如果檢測到它已經消失,則啓動一個新實例..要預先警告CeRunAppAtTime無法安排應用程序少於比未來11秒,所以會有延遲。

+0

thx ctacke會試着讓你知道。 – senzacionale

2

你不應該。最好的辦法是防止這種異常,並首先解決導致它的錯誤。

但是,如果您確實需要重啓應用程序,除了崩潰之外的任何其他原因,那麼您可以在後臺啓動另一個進程,以及應用程序監視應用程序是否仍在運行並使用Process.Start()如果沒有的話。 (如果你的應用程序被設置爲在設備上自動運行並且你的設備支持它,這很可能是因爲它是Windows CE的東西,但是爲什麼不能 - 如果需要,你也可以使用create Watchdog timers來重新啓動整個設備)

但是重新啓動一個應用程序(假設每天一次)會損壞用戶體驗,也會損壞用戶的信任。所以你應該修復異常。

+1

是的,我看到你的[其他問題](http://stackoverflow.com/questions/7803168/unhandled-exception-my-windows-mobile-application-close)關於崩潰,如果你可以澄清那裏一個什麼樣的例外,你實際上抓住,在什麼情況下拋出比可能有人能夠幫助這部分。 – ytg

+0

我從不想關閉我的應用程序。我想打開登錄表單,當我得到未處理的異常。網絡關閉了,... – senzacionale

相關問題