0

我阅读了许多论坛和链接,例如:

如何重新启动我的 C# WinForm 应用程序?

但所有这些都适用于 Windows,而不适用于移动设备。当我发现未处理的异常时,如何重新启动我的移动应用程序。现在,当我捕获未处理的异常时应用程序已关闭,但我不想关闭它,所以我想重新启动它。

这不起作用:

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

我正在使用 Windows Mobile 6.1 和 CF 3.5

4

2 回答 2

4

WinMo 内置了一种机制来防止应用程序的多个实例运行,因此使用 Process 类调用您自己将简单地启动一个外壳终止的实例。您必须解决这个问题,P/InvokeCeRunAppAtTime或创建一个单独的看门狗进程,以确保您的应用程序进程始终运行,如果它检测到它已经消失,则启动一个新实例。请注意,CeRunAppAtTime不能以更少的时间安排应用程序超过 11 秒,所以会有延迟。

于 2011-10-19T13:29:04.650 回答
2

你不应该。最好的方法是通过首先修复导致它的错误来防止该异常。

但是,如果您真的,真的,真的需要因为崩溃以外的任何其他原因重新启动您的应用程序,那么您可以在后台启动另一个进程以及您的应用程序,该进程监视应用程序是否仍在运行,Process.Start()如果没有,则再次启动它吨。

(如果您的应用程序设置为在设备上自动运行并且您的设备支持它,-这不太可能,因为它是 Windows CE 的东西,但为什么不呢- 如果需要,您还可以创建看门狗计时器来重新启动整个设备。)

但是一直重启应用程序(比如说每天一次)会破坏用户体验以及用户的信任。因此,您应该改为修复异常。

于 2011-10-19T10:32:26.093 回答