回答
我发现这个: 它的工作原理。 但是。 有没有更好的办法?
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
Application.Current.Shutdown();
这是否保留了命令行参数!? – 2012-07-31 15:06:39
@AndreiRinea不过,只是在开始时保存它们并将它们作为参数传递给此函数调用。这很容易。 – Hooch 2012-08-09 18:30:27
我在WPF用这个,成功:
System.Windows.Forms.Application.Restart();
System.Windows.Application.Current.Shutdown();
这些提议的解决方案可以工作,但作为其他评论者所说,他们觉得有点像一个快速的黑客。另一种做法比较简单的方法是运行一个包含延迟(例如5秒)以等待当前(关闭)应用程序终止的批处理文件。
这可以防止两个应用程序实例同时打开。在我的情况下,它无效的两个应用程序实例同时打开 - 我使用一个互斥体来确保只有一个应用程序打开 - 由于应用程序使用一些硬件资源。
实施例的窗口的批处理文件( “restart.bat”):
sleep 5
start "" "C:\Dev\MyApplication.exe"
而在WPF应用程序,添加以下代码:
// Launch the restart batch file
Process.Start(@"C:\Dev\restart.bat");
// Close the current application
Application.Current.MainWindow.Close();
Application.Restart();
或
System.Diagnostics.Process.Start(Application.ExecutablePath);
Application.Exit();
在我的程序中,我有一个互斥体来确保只有一个实例ce在计算机上运行的应用程序。这导致新启动的应用程序无法启动,因为互斥体未及时发布。因此,我将一个值放入Properties.Settings中,指示应用程序正在重新启动。在调用Application.Restart()之前,将Properties.Settings值设置为true。在Program.Main()中,我还添加了对特定property.settings值的检查,以便当它为true时重置为false并且存在Thread.Sleep(3000);
在你的程序,你可能有逻辑:
if (ShouldRestartApp)
{
Properties.Settings.Default.IsRestarting = true;
Properties.Settings.Default.Save();
Application.Restart();
}
在Program.Main()
[STAThread]
static void Main()
{
Mutex runOnce = null;
if (Properties.Settings.Default.IsRestarting)
{
Properties.Settings.Default.IsRestarting = false;
Properties.Settings.Default.Save();
Thread.Sleep(3000);
}
try
{
runOnce = new Mutex(true, "SOME_MUTEX_NAME");
if (runOnce.WaitOne(TimeSpan.Zero))
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
finally
{
if (null != runOnce)
runOnce.Close();
}
}
就是这样。就像一个魅力
Application.Restart();
Process.GetCurrentProcess().Kill();
工作对我来说
Application.Current.Shutdown();
System.Windows.Forms.Application.Restart();
在这种为了工作对我来说,周围的其他方法刚开始应用的另一个实例。
延迟1秒后通过命令行运行程序的新实例。 延迟当前实例关闭期间。
ProcessStartInfo Info = new ProcessStartInfo();
Info.Arguments = "/C choice /C Y /N /D Y /T 1 & START \"\" \"" + Assembly.GetExecutingAssembly().Location + "\"";
Info.WindowStyle = ProcessWindowStyle.Hidden;
Info.CreateNoWindow = true;
Info.FileName = "cmd.exe";
Process.Start(Info);
Application.Current.Shutdown();
- 1. 重新启动WPF应用程序
- 2. 如何重新启动WPF应用程序?
- 3. 应用程序何时重新启动?
- 4. jenkins slave agent重启后如何重新启动应用程序
- 5. QT4:如何重新启动应用程序?重新设置?
- 6. [Android]应用程序重新启动设备后重新启动
- 7. 将重新启动应用程序重新启动前面
- 8. 如何重新启动设备后重新启动应用程序?
- 9. 从wpf应用程序重新启动MSDTC服务
- 10. 在WPF中重新启动应用程序
- 11. 从C#/ WPF应用程序重新启动机器
- 12. 如何防止Android从启动程序重新启动应用程序
- 13. 避免重新启动应用程序
- 14. Sideview重新启动Android应用程序
- 15. 重新启动iPhone应用程序
- 16. Netbeans - 应用程序重新启动
- 17. action_image_capture重新启动应用程序
- 18. iPhone应用程序重新启动?
- 19. Android - backbutton - 重新启动应用程序
- 20. 重新启动Java Swing应用程序
- 21. TTNavigator重新启动应用程序内
- 22. django/gunicorn应用程序重新启动
- 23. Android重新启动应用程序
- 24. 重新启动Eclipse应用程序
- 25. FragmentCompat重新启动应用程序
- 26. 问题:重新启动应用程序
- 27. 重新启动Iphone应用程序
- 28. 重新启动我的应用程序
- 29. 重新启动Swing应用程序
- 30. 重新启动Java应用程序
可能的重复:http://stackoverflow.com/questions/3895188/restart-my-application-using-c,http://stackoverflow.com/questions/1225406/if-wpf-app-is - 不响应,然后自动重新启动,http://stackoverflow.com/questions/3634439/how-can-i-restart-wpf-application。共识是没有确切的WinForms方式的重复,所有的“解决方案”闻起来都有些尴尬。我怀疑这是因为除非在调试过程中,您通常不需要这样做。 – 2011-01-23 14:18:23
@Cody Gray 现在我再次调用正在应用程序明星上调用的那些方法。它运作良好。但对于其他应用程序,我必须重新启动应用 – Hooch 2011-01-24 09:24:13
@Cody Gray为什么你说永远不需要这个?为什么应用程序可能需要重新启动有很多原因,为什么强制用户重新运行可执行文件时,你可以为他们做到这一点? – epalm 2011-03-10 21:13:24