internal UnregisterOperationHostSettings(string assemblyPath, SingletonSettings.UnRegisterMode mode, bool doRegisterCall, SingletonSettings.SignCheckMode signCheck, SingletonSettings.AddinRegMode addinRegMode) { AssemblyPath = assemblyPath; Mode = mode; DoRegisterCall = doRegisterCall; SignCheck = signCheck; AddinRegMode = addinRegMode; }
internal void DeleteComponentKey(SingletonSettings.UnRegisterMode mode, string key) { RegistryKey[] rootKeys = null; switch (mode) { case SingletonSettings.UnRegisterMode.Auto: rootKeys = new RegistryKey[2]; rootKeys[0] = Microsoft.Win32.Registry.ClassesRoot; rootKeys[1] = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(_userBypass, true); break; case SingletonSettings.UnRegisterMode.System: rootKeys = new RegistryKey[] { Microsoft.Win32.Registry.ClassesRoot }; break; case SingletonSettings.UnRegisterMode.User: rootKeys = new RegistryKey[] { Microsoft.Win32.Registry.CurrentUser.OpenSubKey(_userBypass, true) }; break; default: throw new IndexOutOfRangeException("mode"); } foreach (RegistryKey item in rootKeys) { try { item.DeleteSubKeyTree(key, false); item.Close(); } catch (System.Security.SecurityException) { if (mode != SingletonSettings.UnRegisterMode.Auto) { throw; } } catch (System.UnauthorizedAccessException) { if (mode != SingletonSettings.UnRegisterMode.Auto) { throw; } } catch (Exception) { throw; } } }
internal static AddinClassInformations Create(Assembly addinAssembly, IEnumerable <object> assemblyAttributes, SingletonSettings.UnRegisterMode mode, Type addinClassType, IEnumerable <object> addinClassAttributes) { AssemblyName binaryHeader = addinAssembly.GetName(); string assemblyName = binaryHeader.Name; string assemblyVersion = binaryHeader.Version.ToString(); string assemblyCulture = CultureInfoConversion.ConvertToString(binaryHeader.CultureInfo); string assemblyToken = TokenConversion.ConvertToString(binaryHeader.GetPublicKeyToken()); string runtimeVersion = addinAssembly.ImageRuntimeVersion; string[] classesRoot = null; switch (mode) { case SingletonSettings.UnRegisterMode.Auto: classesRoot = new string[] { "HKEY_CLASSES_ROOT", "HKEY_CURRENT_USER\\Software\\Classes" }; break; case SingletonSettings.UnRegisterMode.System: classesRoot = new string[] { "HKEY_CLASSES_ROOT" }; break; case SingletonSettings.UnRegisterMode.User: classesRoot = new string[] { "HKEY_CURRENT_USER\\Software\\Classes" }; break; default: throw new IndexOutOfRangeException("mode"); } string progid = AttributeReflection.GetAttribute <ProgIdAttribute>(addinClassAttributes).Value; string fullClassName = addinClassType.FullName; string id = AttributeReflection.GetAttribute <GuidAttribute>(addinClassAttributes).Value; string codebase = addinAssembly.CodeBase; AddinClassInformations result = new AddinClassInformations( assemblyName, assemblyVersion, assemblyCulture, assemblyToken, runtimeVersion, classesRoot, progid, fullClassName, id, codebase); return(result); }
private void DeleteRegistryEntries(Assembly addinAssembly, IEnumerable <object> assemblyAttributes, SingletonSettings.UnRegisterMode mode, Type addinClassType, IEnumerable <object> addinClassAttributes) { AddinClassInformation addinClass = AddinClassInformation.Create( addinAssembly, assemblyAttributes, mode, addinClassType, addinClassAttributes); Registry registry = new Registry(); registry.DeleteComponentKey(Settings.Mode, addinClass.ProgId); registry.DeleteComponentKey(Settings.Mode, "CLSID\\{" + addinClass.Id + "}"); }