1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

UI - Ensure proper restart and shutdown

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

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;
}

View File

@ -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());
}
}

View File

@ -1,6 +1,7 @@
using System.Windows;
using Artemis.Core.Services;
using Artemis.Core.Services.Interfaces;
using Artemis.Core.Utilities;
using Artemis.UI.Events;
using Artemis.UI.Screens.Splash;
using Ninject;
@ -57,7 +58,7 @@ namespace Artemis.UI.Screens
public void TrayExit()
{
Application.Current.Shutdown();
CurrentProcessUtilities.Shutdown(2, false);
}
private void ShowSplashScreen()