UI - Ensure proper restart and shutdown

This commit is contained in:
SpoinkyNL committed 2020-03-03 20:00:21 +01:00
1 parent c62997ca41
commit 002ae29638
3 files changed
+16 -7

No files matched your search

+1 -1
View File
@@ -348,7 +348,7 @@ namespace Artemis.Core.Services
// Device providers cannot be disabled at runtime, restart the application
if (plugin is DeviceProvider)
{
CurrentProcessUtilities.RestartSelf();
CurrentProcessUtilities.Shutdown(2, true);
return;
}
@@ -11,16 +11,24 @@ namespace Artemis.Core.Utilities
return Process.GetCurrentProcess().MainModule.FileName;
}
public static void RestartSelf()
public static void Shutdown(int delay, bool restart)
{
// Always kill the process after the delay has passed, with all the plugins a graceful shutdown cannot be guaranteed
var arguments = "-Command \"& {Start-Sleep -s " + delay + "; (Get-Process 'Artemis.UI').kill()}";
// If restart is required, start the executable again after the process was killed
if (restart)
arguments = "-Command \"& {Start-Sleep -s " + delay + "; (Get-Process 'Artemis.UI').kill(); Start-Process -FilePath '" + GetCurrentLocation() + "'}\"";
var info = new ProcessStartInfo
{
Arguments = "/C choice /C Y /N /D Y /T 5 & START /wait taskkill /f /im \"Artemis.UI.exe\" & START \"\" \"" + GetCurrentLocation() + "\"",
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true,
FileName = "cmd.exe"
Arguments = arguments,
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true,
FileName = "PowerShell.exe"
};
Process.Start(info);
// Also attempt a graceful shutdown on the UI thread
Execute.OnUIThread(() => Application.Current.Shutdown());
}
}