2011-10-19 60 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

相关问题