diff --git a/ZuneModdingHelper/Pages/SettingsPage.xaml b/ZuneModdingHelper/Pages/SettingsPage.xaml
index aa1e3e5..9c61faf 100644
--- a/ZuneModdingHelper/Pages/SettingsPage.xaml
+++ b/ZuneModdingHelper/Pages/SettingsPage.xaml
@@ -23,6 +23,12 @@
+
+
+
diff --git a/ZuneModdingHelper/Pages/SettingsPage.xaml.cs b/ZuneModdingHelper/Pages/SettingsPage.xaml.cs
index b5f3a56..b4574ad 100644
--- a/ZuneModdingHelper/Pages/SettingsPage.xaml.cs
+++ b/ZuneModdingHelper/Pages/SettingsPage.xaml.cs
@@ -1,6 +1,11 @@
-using Microsoft.WindowsAPICodePack.Dialogs;
+using CommunityToolkit.Mvvm.Messaging;
+using Microsoft.WindowsAPICodePack.Dialogs;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
using System.Windows;
using System.Windows.Controls;
+using ZuneModdingHelper.Messages;
using ZuneModdingHelper.Services;
namespace ZuneModdingHelper.Pages
@@ -43,6 +48,44 @@ namespace ZuneModdingHelper.Pages
ViewModel.Settings.ZuneInstallDir = dialog.FileName;
}
}
+
+ private void KillZuneButton_Click(object sender, RoutedEventArgs e)
+ {
+ var curProc = Process.GetCurrentProcess();
+ var zuneProcs = Process.GetProcesses()
+ .Where(p =>
+ p.ProcessName.Contains("zune", System.StringComparison.OrdinalIgnoreCase)
+ && p.Id != curProc.Id
+ );
+
+ StringBuilder sb = new("The following processes were killed:\r\n");
+ bool anyKilled = false;
+
+ foreach (var proc in zuneProcs)
+ {
+ var id = proc.Id;
+ var name = proc.ProcessName;
+ var path = OwlCore.Flow.Catch(() => proc.MainModule.FileName);
+
+ try
+ {
+ proc.Kill(true);
+
+ sb.AppendFormat(" • ({0}) {1}", id, name);
+ if (path is not null)
+ sb.AppendFormat(" @ {0}", path);
+ sb.AppendLine();
+
+ anyKilled = true;
+ }
+ catch { }
+ }
+
+ WeakReferenceMessenger.Default.Send(new ShowDialogMessage(new()
+ {
+ Description = anyKilled ? sb.ToString() : "No processes were killed.",
+ }));
+ }
}
internal class SettingsViewModel