private void DeleteRegistryEntries(Assembly addinAssembly, IEnumerable <object> assemblyAttributes, SingletonSettings.UnRegisterMode mode, Type addinClassType, IEnumerable <object> addinClassAttributes) { AddinClassInformations addinClass = AddinClassInformations.Create( addinAssembly, assemblyAttributes, mode, addinClassType, addinClassAttributes); Registry registry = new Registry(); registry.DeleteComponentKey(Settings.Mode, addinClass.ProgId); registry.DeleteComponentKey(Settings.Mode, "CLSID\\{" + addinClass.Id + "}"); }
private void CreateRegistryEntries(Assembly addinAssembly, IEnumerable <object> assemblyAttributes, SingletonSettings.RegisterMode mode, Type addinClassType, IEnumerable <object> addinClassAttributes) { AddinClassInformations addinClass = AddinClassInformations.Create( addinAssembly, assemblyAttributes, mode, addinClassType, addinClassAttributes); Registry registry = new Registry(); Microsoft.Win32.RegistryKey key = registry.CreateComponentKey(Settings.Mode, addinClass.ProgId); registry.CreateComponentValue(key, "", addinClass.FullClassName, Microsoft.Win32.RegistryValueKind.String); key.Close(); key = registry.CreateComponentKey(Settings.Mode, String.Format("{0}\\CLSID", addinClass.ProgId)); registry.CreateComponentValue(key, "", "{" + addinClass.Id.ToString() + "}", Microsoft.Win32.RegistryValueKind.String); key.Close(); key = registry.CreateComponentKey(Settings.Mode, "CLSID\\{" + addinClass.Id + "}"); registry.CreateComponentValue(key, "", addinClass.FullClassName, Microsoft.Win32.RegistryValueKind.String); key.Close(); key = registry.CreateComponentKey(Settings.Mode, "CLSID\\{" + addinClass.Id + "}\\InprocServer32"); registry.CreateComponentValue(key, "", "mscoree.dll", Microsoft.Win32.RegistryValueKind.String); registry.CreateComponentValue(key, "ThreadingModel", "Both", Microsoft.Win32.RegistryValueKind.String); registry.CreateComponentValue(key, "Class", addinClass.FullClassName, Microsoft.Win32.RegistryValueKind.String); registry.CreateComponentValue(key, "Assembly", String.Format("{0}, Version={1}, Culture={2}, PublicKeyToken={3}", addinClass.AssemblyName, addinClass.AssemblyVersion, addinClass.AssemblyCulture, addinClass.AssemblyToken), Microsoft.Win32.RegistryValueKind.String); registry.CreateComponentValue(key, "RuntimeVersion", addinClass.RuntimeVersion, Microsoft.Win32.RegistryValueKind.String); if (Settings.Codebase) { registry.CreateComponentValue(key, "Codebase", addinClass.Codebase, Microsoft.Win32.RegistryValueKind.String); } key.Close(); key = registry.CreateComponentKey(Settings.Mode, "CLSID\\{" + addinClass.Id + "}\\InprocServer32\\" + addinClass.AssemblyVersion); registry.CreateComponentValue(key, "Class", addinClass.FullClassName, Microsoft.Win32.RegistryValueKind.String); registry.CreateComponentValue(key, "Assembly", String.Format("{0}, Version={1}, Culture={2}, PublicKeyToken={3}", addinClass.AssemblyName, addinClass.AssemblyVersion, addinClass.AssemblyCulture, addinClass.AssemblyToken), Microsoft.Win32.RegistryValueKind.String); registry.CreateComponentValue(key, "RuntimeVersion", addinClass.RuntimeVersion, Microsoft.Win32.RegistryValueKind.String); if (Settings.Codebase) { registry.CreateComponentValue(key, "Codebase", addinClass.Codebase, Microsoft.Win32.RegistryValueKind.String); } key.Close(); key = registry.CreateComponentKey(Settings.Mode, String.Format("CLSID\\{0}\\{1}", "{" + addinClass.Id + "}", "ProgId")); registry.CreateComponentValue(key, "", addinClass.ProgId, Microsoft.Win32.RegistryValueKind.String); key.Close(); key = registry.CreateComponentKey(Settings.Mode, String.Format("CLSID\\{0}\\Implemented Categories\\{1}", "{" + addinClass.Id + "}", "{" + addinClass.ComponentCategoryId + "}")); key.Close(); }
private string CreateRegistryFileContent(Assembly addinAssembly, IEnumerable <object> assemblyAttributes, SingletonSettings.RegisterMode mode, Type addinClassType, IEnumerable <object> addinClassAttributes) { AddinClassInformations addinClass = AddinClassInformations.Create( addinAssembly, assemblyAttributes, mode, addinClassType, addinClassAttributes); StringBuilder content = new StringBuilder(); content.AppendLine(String.Format("[{0}\\{1}]", addinClass.ClassesRoot, addinClass.ProgId)); content.AppendLine(String.Format("@=\"{0}\"", addinClass.FullClassName)); content.AppendLine(String.Empty); content.AppendLine(String.Format("[{0}\\{1}\\CLSID]", addinClass.ClassesRoot, addinClass.ProgId)); content.AppendLine("@=\"{" + addinClass.Id.ToString() + "}\""); content.AppendLine(String.Empty); content.AppendLine("[" + addinClass.ClassesRoot + "\\CLSID\\{" + addinClass.Id + "}]"); content.AppendLine(String.Format("@=\"{0}\"", addinClass.FullClassName)); content.AppendLine(String.Empty); content.AppendLine("[" + addinClass.ClassesRoot + "\\CLSID\\{" + addinClass.Id + "}\\InprocServer32]"); content.AppendLine("@=\"mscoree.dll\""); content.AppendLine("\"ThreadingModel\"=\"Both\""); content.AppendLine(String.Format("\"Class\"=\"{0}\"", addinClass.FullClassName)); content.AppendLine(String.Format("\"Assembly\"=\"{0}, Version={1}, Culture={2}, PublicKeyToken={3}\"", addinClass.AssemblyName, addinClass.AssemblyVersion, addinClass.AssemblyCulture, addinClass.AssemblyToken)); content.AppendLine(String.Format("\"RuntimeVersion\"=\"{0}\"", addinClass.RuntimeVersion)); if (Settings.Codebase) { content.AppendLine(String.Format("\"Codebase\"=\"{0}\"", addinClass.Codebase)); } content.AppendLine(String.Empty); content.AppendLine("[" + addinClass.ClassesRoot + "\\CLSID\\{" + addinClass.Id + "}\\InprocServer32\\" + addinClass.AssemblyVersion + "]"); content.AppendLine(String.Format("\"Class\"=\"{0}\"", addinClass.FullClassName)); content.AppendLine(String.Format("\"Assembly\"=\"{0}, Version={1}, Culture={2}, PublicKeyToken={3}\"", addinClass.AssemblyName, addinClass.AssemblyVersion, addinClass.AssemblyCulture, addinClass.AssemblyToken)); content.AppendLine(String.Format("\"RuntimeVersion\"=\"{0}\"", addinClass.RuntimeVersion)); if (Settings.Codebase) { content.AppendLine(String.Format("\"Codebase\"=\"{0}\"", addinAssembly.CodeBase)); } content.AppendLine(String.Empty); content.AppendLine("[" + addinClass.ClassesRoot + "\\CLSID\\{" + addinClass.Id + "}\\ProgId]"); content.AppendLine(String.Format("@=\"{0}\"", addinClass.ProgId)); content.AppendLine(String.Empty); content.AppendLine("[" + addinClass.ClassesRoot + "\\CLSID\\{" + addinClass.Id + "}\\Implemented Categories\\{" + addinClass.ComponentCategoryId.ToString() + "}]"); if (Settings.AddinRegMode == SingletonSettings.AddinRegMode.On) { Dictionary <object, Type> attributeTypes = GetAttributeTypes(addinClassType.GetCustomAttributes(true)); bool isMultiAddin = AddinRegAnalyzer.IsMultiAddin(addinClassType); KeyValuePair <object, Type> multi = AddinRegAnalyzer.GetMultiRegisterAttribute(attributeTypes); KeyValuePair <object, Type> comAddin = AddinRegAnalyzer.GetComAddinAttribute(attributeTypes); if (null != comAddin.Key) { string name = (string)comAddin.Value.InvokeMember("Name", BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetField, null, comAddin.Key, new object[0]); string description = (string)comAddin.Value.InvokeMember("Description", BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetField, null, comAddin.Key, new object[0]); int loadBehavior = (int)comAddin.Value.InvokeMember("LoadBehavior", BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetField, null, comAddin.Key, new object[0]); int commandLineSafe = (int)comAddin.Value.InvokeMember("CommandLineSafe", BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetField, null, comAddin.Key, new object[0]); if (true == isMultiAddin && multi.Key != null) { IEnumerable products = multi.Value.InvokeMember("Products", BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetField, null, multi.Key, new string[0]) as IEnumerable; if (null != products) { foreach (object item in products) { int productIndex = Convert.ToInt32(item); CreateOfficeRegistryKey(content, _multiRegisterIn[productIndex], addinClass.ProgId, name, description, loadBehavior, commandLineSafe, Settings.Mode == SingletonSettings.RegisterMode.System); } } } else if (false == isMultiAddin) { string key = GetKeyName(addinClassType); CreateOfficeRegistryKey(content, key, addinClass.ProgId, name, description, loadBehavior, commandLineSafe, Settings.Mode == SingletonSettings.RegisterMode.System); } } } return(content.ToString()); }