From 93f5c72ef21331b79464a9b62a70242a8aad9edf Mon Sep 17 00:00:00 2001 From: administrator Date: Sat, 2 May 2026 01:34:56 +0200 Subject: [PATCH] Fix STAThread, Dienst-Neustart nach Speichern, Pfad-Fix install-service --- MailPrintConfig/MailPrintConfig.csproj | 2 ++ MailPrintConfig/MainForm.cs | 45 +++++++++++++++++++++----- MailPrintConfig/Program.cs | 13 ++++++-- MailPrintConfig/app.manifest | 11 +++++++ 4 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 MailPrintConfig/app.manifest diff --git a/MailPrintConfig/MailPrintConfig.csproj b/MailPrintConfig/MailPrintConfig.csproj index dd16daf..4d09e5e 100644 --- a/MailPrintConfig/MailPrintConfig.csproj +++ b/MailPrintConfig/MailPrintConfig.csproj @@ -10,10 +10,12 @@ MailPrintConfig true win-x64 + app.manifest + diff --git a/MailPrintConfig/MainForm.cs b/MailPrintConfig/MainForm.cs index aa4d363..5d98a89 100644 --- a/MailPrintConfig/MainForm.cs +++ b/MailPrintConfig/MainForm.cs @@ -491,6 +491,17 @@ public class MainForm : Form ?? Path.Combine(AppContext.BaseDirectory, "appsettings.json"); } + private static bool IsServiceRunning() + { + try + { + var svc = System.ServiceProcess.ServiceController.GetServices() + .FirstOrDefault(s => s.ServiceName == ServiceName); + return svc?.Status == System.ServiceProcess.ServiceControllerStatus.Running; + } + catch { return false; } + } + private void BrowseFolder(int rowIndex) { string? result = null; @@ -714,6 +725,23 @@ public class MainForm : Form Directory.CreateDirectory(Path.GetDirectoryName(path)!); File.WriteAllText(path, root.ToString(Formatting.Indented)); SetStatus($"Gespeichert: {path}", Color.DarkGreen); + + // Dienst-Neustart anbieten wenn Dienst läuft + if (IsServiceRunning()) + { + if (MessageBox.Show( + "Konfiguration gespeichert.\n\nDienst jetzt neu starten um Änderungen zu übernehmen?", + "Dienst neu starten?", + MessageBoxButtons.YesNo, + MessageBoxIcon.Question) == DialogResult.Yes) + { + _ = ServiceActionAsync("stop").ContinueWith(async _ => + { + await Task.Delay(1500); + await ServiceActionAsync("start"); + }); + } + } } catch (Exception ex) { SetStatus($"Fehler: {ex.Message}", Color.Red); } } @@ -785,10 +813,10 @@ public class MainForm : Form private async Task ServiceActionAsync(string action) { - var publishDir = Path.GetDirectoryName(txtConfigPath.Text) ?? AppContext.BaseDirectory; - var exePath = Path.Combine(publishDir, "MailPrint.exe"); - var installPs = Path.Combine(publishDir, "..", "install-service.ps1"); - var uninstallPs= Path.Combine(publishDir, "..", "uninstall-service.ps1"); + var publishDir = Path.GetDirectoryName(txtConfigPath.Text) ?? AppContext.BaseDirectory; + var exePath = Path.Combine(publishDir, "MailPrint.exe"); + var installPs = Path.Combine(publishDir, "install-service.ps1"); + var uninstallPs = Path.Combine(publishDir, "uninstall-service.ps1"); // Bestätigung nur bei Install/Deinstall if (action is "install" or "uninstall") @@ -818,12 +846,13 @@ public class MainForm : Form { FileName = "powershell", Arguments = $"-NoProfile -NonInteractive {cmd}", - UseShellExecute = true, - Verb = "runas", - WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden + UseShellExecute = false, + CreateNoWindow = true, + RedirectStandardError = true }; using var p = System.Diagnostics.Process.Start(psi)!; + string err = await p.StandardError.ReadToEndAsync(); await p.WaitForExitAsync(); if (p.ExitCode == 0) @@ -840,7 +869,7 @@ public class MainForm : Form MessageBox.Show(successMsg, "Erfolgreich", MessageBoxButtons.OK, MessageBoxIcon.Information); } else - SetStatus($"'{action}' fehlgeschlagen (Code {p.ExitCode})", Color.Red); + SetStatus($"'{action}' fehlgeschlagen (Code {p.ExitCode}): {err.Trim()}", Color.Red); } catch (Exception ex) { SetStatus($"Fehler: {ex.Message}", Color.Red); } finally { DisableServiceButtons(false); RefreshStartStop(); } diff --git a/MailPrintConfig/Program.cs b/MailPrintConfig/Program.cs index eec6102..68c48fd 100644 --- a/MailPrintConfig/Program.cs +++ b/MailPrintConfig/Program.cs @@ -1,5 +1,12 @@ using MailPrintConfig; -Application.EnableVisualStyles(); -Application.SetCompatibleTextRenderingDefault(false); -Application.Run(new MainForm()); +class Program +{ + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } +} diff --git a/MailPrintConfig/app.manifest b/MailPrintConfig/app.manifest new file mode 100644 index 0000000..07e6554 --- /dev/null +++ b/MailPrintConfig/app.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + +