From a1f179f51a704648986faf2a67e219317f5656d1 Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Wed, 1 May 2024 16:11:31 +0300 Subject: [PATCH] Catch extension errors on remove to allow installer to continue WE2-925 Signed-off-by: Raul Metsma --- src/FirefoxAction.cs | 47 +++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/FirefoxAction.cs b/src/FirefoxAction.cs index 109c0f1..b606c5b 100644 --- a/src/FirefoxAction.cs +++ b/src/FirefoxAction.cs @@ -36,7 +36,7 @@ public static ActionResult ExtensionSettingsInstall(Session session) // with error status 1603, but when letting exceptions through the raw exception // stack trace will be logged in installer log which gives more information. - var extensionSettings = GetExtensionSettingsFromSession(session); + var extensionSettings = session.GetExtensionSettings(); session.Log("Begin ExtensionSettingsInstall " + extensionSettings.UUID); using (RegistryKey firefox = Utils.FirefoxKey()) { @@ -55,25 +55,35 @@ public static ActionResult ExtensionSettingsInstall(Session session) [CustomAction] public static ActionResult ExtensionSettingsRemove(Session session) { - var extensionSettings = GetExtensionSettingsFromSession(session); - session.Log("Begin ExtensionSettingsRemove " + extensionSettings.UUID); - using (RegistryKey firefox = Utils.FirefoxKey()) - { - string value = firefox.GetStringValue("ExtensionSettings"); - if (value != null) - { - JObject json = JObject.Parse(value); - json[extensionSettings.UUID] = new JObject - { - ["installation_mode"] = "blocked" - }; - firefox.SetValue("ExtensionSettings", json.ToString().Split('\n')); - } - return ActionResult.Success; + try + { + var extensionSettings = session.GetExtensionSettings(); + session.Log("Begin ExtensionSettingsRemove " + extensionSettings.UUID); + using (RegistryKey firefox = Utils.FirefoxKey()) + { + string value = firefox.GetStringValue("ExtensionSettings"); + if (value != null) + { + JObject json = JObject.Parse(value); + json[extensionSettings.UUID] = new JObject + { + ["installation_mode"] = "blocked" + }; + firefox.SetValue("ExtensionSettings", json.ToString().Split('\n')); + } + } + } + catch(Exception ex) + { + session.Log("End ExtensionSettingsRemove " + extensionSettings.UUID, ex); } + return ActionResult.Success; } + } - private static (string UUID, string URL) GetExtensionSettingsFromSession(Session session) + internal static class Utils + { + internal static (string UUID, string URL) GetExtensionSettings(Session session) { // Deferred custom actions cannot directly access installer properties from session, // only the CustomActionData property is available, see README how to populate it. @@ -82,10 +92,7 @@ private static (string UUID, string URL) GetExtensionSettingsFromSession(Session session.CustomActionData["EXTENSIONSETTINGS_URL"] ); } - } - internal static class Utils - { internal static RegistryKey FirefoxKey() { using (RegistryKey mozilla = Registry.LocalMachine.OpenOrCreateSubKey(@"Software\Policies\Mozilla", true))