27

How can I restart my WPF application using C#?

Bjørn Madsen
  • 378
  • 3
  • 17
kartal
  • 16,372
  • 32
  • 98
  • 143

4 Answers4

31

I don't think there's a direct method in WPF like there is in WinForms. However, you could use methods from the Windowns.Form namespace like this: (You might need to add a reference to the System.Windows.Form assembly)

System.Windows.Forms.Application.Restart();

System.Windows.Application.Current.Shutdown();
keyboardP
  • 67,723
  • 13
  • 149
  • 201
14

The following is the best solution I found, you don't need to add a reference to System.Windows.Forms, instead you need add the namespace System.Diagnostics which you already has a reference to its assembly:

Process.Start(Application.ResourceAssembly.Location);
Application.Current.Shutdown();
Mohammed A. Fadil
  • 8,905
  • 6
  • 48
  • 65
  • 7
    Note that you don't want to use this method if your application is deployed with ClickOnce. The `ApplicationDeployment.IsNetworkDeployed` will be false when you restart. See http://bit.ly/RKoVBz for more info. If your application is not deployed with ClickOnce, this method works great. – blachniet Oct 21 '12 at 14:16
  • 2
    @blachniet Also, you will start the *old* version after an update if using this method. This issue is also avoided when using the winforms method. – John Jun 13 '15 at 17:50
13

The code

Process.Start(Application.ResourceAssembly.Location);

does not work for .NET Core 3.1 applications. Instead use

using System.Diagnostics;
using System.Windows;

...

Process.Start(Process.GetCurrentProcess().MainModule.FileName);
Application.Current.Shutdown();

This works also for .NET Framework applications.

Hans-Peter Kalb
  • 141
  • 1
  • 4
3

You can use the Windows API Code Pack's Restart and Recovery API. Just be aware that this is a new API, so it will only work on current operating systems (i.e.: Windows 7).

Toni
  • 1,495
  • 4
  • 13
  • 22
Reed Copsey
  • 539,124
  • 75
  • 1,126
  • 1,354