为什么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();
做好了!