/// <summary> /// Try to detect the registry load location from an addin /// </summary> /// <param name="addinType">addin class type informations</param> /// <param name="applicationType">which office application</param> /// <returns>location or unkown</returns> public static RegistryLocationResult TryFindAddinLoadLocation(Type addinType, ApplicationIdentifiers.ApplicationType applicationType) { try { System.Runtime.InteropServices.ProgIdAttribute progId = NetOffice.Tools.AttributeReflector.GetProgIDAttribute(addinType, false); if (null == progId) { return(RegistryLocationResult.Unknown); } string path = String.Format("Software\\Microsoft\\Office\\{0}\\Addins", ApplicationIdentifiers.ConvertApplicationType(applicationType)); Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(path, false); if (null != key) { key.Close(); return(RegistryLocationResult.User); } try { key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(path, false); if (null != key) { key.Close(); return(RegistryLocationResult.System); } } catch (System.Security.SecurityException) { return(RegistryLocationResult.Unknown); } catch { throw; } return(RegistryLocationResult.Unknown); } catch (Exception) { return(RegistryLocationResult.Unknown); } }
/// <summary> /// Try to detect the registry load location from an addin /// </summary> /// <returns>load location or information it is unable to detect</returns> public RegistryLocationResult TryFindAddinLoadLocation() { try { Type addinType = null; if (null != OwnerType) { addinType = OwnerType; } else if (null != Owner) { addinType = Owner.GetType(); } else { return(RegistryLocationResult.Unknown); } System.Runtime.InteropServices.ProgIdAttribute progId = NetOffice.Tools.AttributeReflector.GetProgIDAttribute(addinType, false); if (null == progId) { return(RegistryLocationResult.Unknown); } ApplicationIdentifiers.ApplicationType applicationType = ApplicationIdentifiers.IsApplication(OwnerApplication.UnderlyingType.GUID); if (ApplicationIdentifiers.ApplicationType.None == applicationType) { return(RegistryLocationResult.Unknown); } return(CommonUtils.TryFindAddinLoadLocation(addinType, applicationType)); } catch { throw; } }
/// <summary> /// Try to detect the registry load location from an addin /// </summary> /// <param name="addinType">addin class type informations</param> /// <param name="applicationType">which office application</param> /// <returns>location or unkown</returns> public static RegistryLocationResult TryFindAddinLoadLocation(Type addinType, ApplicationIdentifiers.ApplicationType applicationType) { try { System.Runtime.InteropServices.ProgIdAttribute progId = NetOffice.Tools.AttributeReflector.GetProgIDAttribute(addinType, false); if (null == progId) return RegistryLocationResult.Unknown; string path = String.Format("Software\\Office\\{0}\\Addins", ApplicationIdentifiers.ConvertApplicationType(applicationType)); Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(path, false); if (null != key) { key.Close(); return RegistryLocationResult.User; } try { key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(path, false); if (null != key) { key.Close(); return RegistryLocationResult.System; } } catch (System.Security.SecurityException) { return RegistryLocationResult.Unknown; } catch { throw; } return RegistryLocationResult.Unknown; } catch (Exception) { return RegistryLocationResult.Unknown; } }