Restart a WPF Application

There are times when we simply need to restart our app. However, in wpf, there’s no Restart method in the class Application (as it is in the Windows.Forms). And so you have to restart your app. To do this I will have to use the reference of the System.Windows.Forms dll.

private void Restart()
{ 
    // from System.Windows.Forms.dll
    System.Windows.Forms.Application.Restart();
    Application.Current.Shutdown();
}


Another way of re-starting the wpf application is to do the following

Process.Start(Application.ResourceAssembly.Location);
Application.Current.Shutdown();

If you have a ClickOnce WPF application, you do not want to do this. In order to understand why, you need to understand how a ClickOnce application is normally launched.

The shortcut you click on in the Start menu is not a normal shortcut to an executable. It is actually an appref-ms file, which defines the entry point and location of the application. When you launch using this file, all the parameters in ApplicationDeployment are correctly initialized, and ApplicationDeployment.IsNetworkDeployed is set to true.

However, if you use the code above, you launch using the application’s entry executable instead of the appref-ms. This will cause ApplicationDeployment.IsNetworkDeployed to be false, and the properties will not be initialized as if they were a ClickOnce deployment. More Info

Hence the first approach should always be preferred.