示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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;
            }
        }
示例#3
0
        /// <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;
            }
        }