From c08a625348099d37a43bbc16834baeeb404a40c1 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 3 Apr 2026 19:37:26 +0200 Subject: [PATCH] Write Outlook security keys to both Policies and normal user path On Terminal Servers, normal users cannot write to HKCU\Software\ Policies. Now also writes to HKCU\Software\Microsoft\Office\...\ Security which is always writable and also read by Outlook. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Models/UserSettings.cs | 60 ++++++++++++------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/src/StarfaceOutlookSync/Models/UserSettings.cs b/src/StarfaceOutlookSync/Models/UserSettings.cs index 125f9723..b3f85ea6 100644 --- a/src/StarfaceOutlookSync/Models/UserSettings.cs +++ b/src/StarfaceOutlookSync/Models/UserSettings.cs @@ -42,40 +42,54 @@ namespace StarfaceOutlookSync.Models public void ApplyOutlookSecuritySetting() { // Alle Office-Versionen abdecken (16.0 = 2016/2019/2021/2024/365, 15.0 = 2013) + // Beide Pfade versuchen: Policies (GPO-Pfad) und direkt (normaler User-Pfad) var versions = new[] { "16.0", "15.0" }; + var prefixes = new[] + { + @"Software\Policies\Microsoft\Office", // GPO-Pfad (braucht ggf. Rechte) + @"Software\Microsoft\Office" // Normaler User-Pfad (immer schreibbar) + }; + + var securityValues = new (string name, int value)[] + { + ("ObjectModelGuard", 2), + ("PromptOOMAddressBookAccess", 2), + ("PromptOOMAddressInformationAccess", 2), + ("PromptOOMSend", 2), + ("PromptOOMSaveAs", 2), + ("PromptOOMFormulaAccess", 2), + ("PromptOOMCustomAction", 2), + ("PromptSimpleMAPISend", 2), + ("PromptSimpleMAPINameResolve", 2), + ("PromptSimpleMAPIOpenMessage", 2), + ("AdminSecurityMode", 3), + }; foreach (var ver in versions) { - try + foreach (var prefix in prefixes) { - var regPath = $@"Software\Policies\Microsoft\Office\{ver}\Outlook\Security"; + var regPath = $@"{prefix}\{ver}\Outlook\Security"; - if (AutoAcceptOutlookPrompt) + try { - var key = Registry.CurrentUser.CreateSubKey(regPath); - key.SetValue("ObjectModelGuard", 2, RegistryValueKind.DWord); - key.SetValue("PromptOOMAddressBookAccess", 2, RegistryValueKind.DWord); - key.SetValue("PromptOOMAddressInformationAccess", 2, RegistryValueKind.DWord); - key.SetValue("PromptOOMSend", 2, RegistryValueKind.DWord); - key.SetValue("PromptOOMSaveAs", 2, RegistryValueKind.DWord); - key.SetValue("PromptOOMFormulaAccess", 2, RegistryValueKind.DWord); - key.SetValue("PromptOOMCustomAction", 2, RegistryValueKind.DWord); - key.SetValue("PromptSimpleMAPISend", 2, RegistryValueKind.DWord); - key.SetValue("PromptSimpleMAPINameResolve", 2, RegistryValueKind.DWord); - key.SetValue("PromptSimpleMAPIOpenMessage", 2, RegistryValueKind.DWord); - key.SetValue("AdminSecurityMode", 3, RegistryValueKind.DWord); - key.Close(); - } - else - { - try + if (AutoAcceptOutlookPrompt) { - Registry.CurrentUser.DeleteSubKey(regPath, false); + var key = Registry.CurrentUser.CreateSubKey(regPath); + if (key != null) + { + foreach (var (name, value) in securityValues) + key.SetValue(name, value, RegistryValueKind.DWord); + key.Close(); + } + } + else + { + try { Registry.CurrentUser.DeleteSubKey(regPath, false); } catch { } } - catch { } } + catch { } } - catch { } } } }