为什么Application.Restart()不可靠?

时间:2020-03-06 14:22:41  来源:igfitidea点击:

使用C中的Application.Restart()方法应重新启动当前应用程序:但是看来这并不总是有效。

有人可以告诉我,为什么这个问题一直不起作用吗?

解决方案

尝试在转储之前锁定。这是我启动完整的应用程序转储的方法。可能会为我们工作,可能不会。

Context.Application.Lock();
Context.Session.Abandon();
Context.Application.RemoveAll();
Context.Application.Restart();
Context.Application.UnLock();

可能有很多原因。这并不是说该方法无效;而是,很多时候程序员忘记了自己在代码中放了一些东西,这些东西会阻止应用程序自动关闭或者启动。两个例子:

  • 表单上的关闭事件可以停止应用程序的关闭
  • 如果要检查已经运行的进程,则旧进程可能关闭得不够快,无法启动新进程。

检查代码中的陷阱。如果我们在空白应用程序中看到此行为,则实际功能比代码更可能是问题。

检查Microsoft的应用程序重新启动源代码。

我唯一遇到这种问题的时间是在我的主窗体中有一个自定义的" FormClosing"事件处理程序时,该处理程序执行逻辑并取消了该事件。

编辑:

现在,我遇到了另一个实例,根据评论,它可能反映了我们所遇到的情况。

当使用Mutex运行单个实例应用程序时,我从相当嵌入式的位置调用Application.Restart(),这需要进行大量清理工作。因此,似乎重新启动是在前一个实例完成之前启动新实例,因此Mutex阻止了新实例启动。

如果该应用程序是首先从某个网络位置启动的并且未签名(首先显示警告对话框),它将不会重新启动,只会退出。

就我而言(没有单实例),

Application.Restart();

没用

System.Diagnostics.Process.Start(Application.ExecutablePath);
Application.Exit();

做好了!