示例#1
0
        public void ShowNotification(DisabledKey item, NotifyKind notfiyKind, RegistryChangeInfo changeInfo)
        {
            if (_parent.FirstRun)
                return;
            string message = GetMessage(notfiyKind);
            switch (notfiyKind )
            {
                case NotifyKind.DisabledItemNew:
                    NewDeactivatedElementInfo newInfo = (NewDeactivatedElementInfo)changeInfo;
                    message = string.Format(message, newInfo.OfficeProductVersion, newInfo.Name, Environment.NewLine);
                    break;
                case NotifyKind.DisabledItemDelete:
                    DeleteDeactivatedElementInfo deleteInfo = (DeleteDeactivatedElementInfo)changeInfo;
                    message = string.Format(message, deleteInfo.OfficeProductVersion, deleteInfo.Name, Environment.NewLine);
                    break;
                default:
                    throw new ArgumentOutOfRangeException(notfiyKind.ToString() + " is not valid in this context");
            }

            if (_parent.NotifyType == NotificationType.MessageBox)
                MessageBox.Show(message, "NetOffice.DeveloperToolbox", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                _trayIcon.ShowBalloonTip(2000, message, "NetOffice.DeveloperToolbox " + notfiyKind.ToString(), ToolTipIcon.Info);
            
            if (null != MessageFired)
                MessageFired(message, new EventArgs());
        }
示例#2
0
        public void ShowNotification(AddinKey item, NotifyKind notfiyKind, RegistryChangeInfo changeInfo)
        {
            if (_parent.FirstRun)
            {
                return;
            }
            string message = GetMessage(notfiyKind);

            switch (notfiyKind)
            {
            case NotifyKind.AddinLoadBehaviorRestored:
                AddinValueValueRestoredInfo restoredInfo = (AddinValueValueRestoredInfo)changeInfo;
                message = string.Format(message, restoredInfo.RootKey, restoredInfo.KeyPath, restoredInfo.ValueName, restoredInfo.RestoredValue, restoredInfo.OldValue, Environment.NewLine);
                break;

            case NotifyKind.AddinValueNameIsChanged:
                AddinValueNameChangedInfo nameInfo = (AddinValueNameChangedInfo)changeInfo;
                message = string.Format(message, nameInfo.RootKey, nameInfo.KeyPath, nameInfo.OldValueName, nameInfo.NewValueName, Environment.NewLine);
                break;

            case NotifyKind.AddinValueKindIsChanged:
                AddinValueKindChangedInfo kindInfo = (AddinValueKindChangedInfo)changeInfo;
                message = string.Format(message, kindInfo.RootKey, kindInfo.KeyPath, kindInfo.ValueName, kindInfo.OldValueKind, kindInfo.NewValueKind, Environment.NewLine);
                break;

            case NotifyKind.AddinValueIsChanged:
                AddinValueValueChangedInfo valueInfo = (AddinValueValueChangedInfo)changeInfo;
                message = string.Format(message, valueInfo.RootKey, valueInfo.KeyPath, valueInfo.ValueName, valueInfo.OldValue, valueInfo.NewValue, Environment.NewLine);
                break;

            case NotifyKind.AddinValuesIncrement:
                AddinValuesIncrementInfo incrementInfo = (AddinValuesIncrementInfo)changeInfo;
                message = string.Format(message, incrementInfo.RootKey, incrementInfo.KeyPath, incrementInfo.ValueName, Environment.NewLine);
                break;

            case NotifyKind.AddinValuesDecrement:
                AddinValuesDecrementInfo decrementInfo = (AddinValuesDecrementInfo)changeInfo;
                message = string.Format(message, decrementInfo.RootKey, decrementInfo.KeyPath, decrementInfo.ValueName, Environment.NewLine);
                break;

            default:
                throw new ArgumentOutOfRangeException(notfiyKind.ToString() + " is not valid in this context");
            }

            if (_parent.NotifyType == NotificationType.MessageBox)
            {
                MessageBox.Show(message, "NetOffice.DeveloperToolbox", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                _trayIcon.ShowBalloonTip(2000, message, "NetOffice.DeveloperToolbox " + notfiyKind.ToString(), ToolTipIcon.Info);
            }

            if (null != MessageFired)
            {
                MessageFired(message, new EventArgs());
            }
        }
示例#3
0
        void _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            if (_isDisposed)
            {
                return;
            }

            try
            {
                if (_enabled)
                {
                    while (_stopFlag)
                    {
                        _stopFlagAgreed = true;
                    }
                    _stopFlagAgreed = false;

                    foreach (DisabledKey item in _disabledItems)
                    {
                        RegistryChangeInfo changeInfo = null;
                        NotifyKind         kind       = item.CheckChangedValueCount(ref changeInfo);
                        if (kind != NotifyKind.Nothing)
                        {
                            _notify.ShowNotification(item, kind, changeInfo);
                        }
                    }

                    foreach (AddinsKey addins in _addinItems)
                    {
                        RegistryChangeInfo changeInfo = null;
                        NotifyKind         kind       = addins.CheckChangedSubKeys(ref changeInfo);
                        if (kind != NotifyKind.Nothing)
                        {
                            _notify.ShowNotification(addins, kind, changeInfo);
                        }

                        foreach (AddinKey addin in addins.Addins)
                        {
                            kind = addin.CheckChangedValues(ref changeInfo);
                            if (kind != NotifyKind.Nothing)
                            {
                                _notify.ShowNotification(addin, kind, changeInfo);
                            }
                        }
                    }

                    _firstRun = false;
                }
            }
            catch (Exception exception)
            {
                RaiseError(exception);
            }
        }
示例#4
0
        public void ShowNotification(AddinKey item, NotifyKind notfiyKind, RegistryChangeInfo changeInfo)
        {
            if (_parent.FirstRun)
                return;
            string message = GetMessage(notfiyKind);
            switch (notfiyKind)
            {
                case NotifyKind.AddinLoadBehaviorRestored:
                    AddinValueValueRestoredInfo restoredInfo = (AddinValueValueRestoredInfo)changeInfo;
                    message = string.Format(message, restoredInfo.RootKey, restoredInfo.KeyPath, restoredInfo.ValueName, restoredInfo.RestoredValue, restoredInfo.OldValue, Environment.NewLine);
                    break;
                case NotifyKind.AddinValueNameIsChanged:
                    AddinValueNameChangedInfo nameInfo = (AddinValueNameChangedInfo)changeInfo;
                    message = string.Format(message, nameInfo.RootKey, nameInfo.KeyPath, nameInfo.OldValueName, nameInfo.NewValueName, Environment.NewLine);
                    break;
                case NotifyKind.AddinValueKindIsChanged:
                    AddinValueKindChangedInfo kindInfo = (AddinValueKindChangedInfo)changeInfo;
                    message = string.Format(message, kindInfo.RootKey, kindInfo.KeyPath, kindInfo.ValueName, kindInfo.OldValueKind, kindInfo.NewValueKind, Environment.NewLine);
                    break;
                case NotifyKind.AddinValueIsChanged:
                    AddinValueValueChangedInfo valueInfo = (AddinValueValueChangedInfo)changeInfo;
                    message = string.Format(message, valueInfo.RootKey, valueInfo.KeyPath, valueInfo.ValueName, valueInfo.OldValue, valueInfo.NewValue, Environment.NewLine);
                    break;
                case NotifyKind.AddinValuesIncrement:
                    AddinValuesIncrementInfo incrementInfo = (AddinValuesIncrementInfo)changeInfo;
                    message = string.Format(message, incrementInfo.RootKey, incrementInfo.KeyPath, incrementInfo.ValueName, Environment.NewLine);
                    break;
                case NotifyKind.AddinValuesDecrement:
                    AddinValuesDecrementInfo decrementInfo = (AddinValuesDecrementInfo)changeInfo;
                    message = string.Format(message, decrementInfo.RootKey, decrementInfo.KeyPath, decrementInfo.ValueName, Environment.NewLine);
                    break;
                default:
                    throw new ArgumentOutOfRangeException(notfiyKind.ToString() + " is not valid in this context");
            }

            if (_parent.NotifyType == NotificationType.MessageBox)
                MessageBox.Show(message, "NetOffice.DeveloperToolbox", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                _trayIcon.ShowBalloonTip(2000, message, "NetOffice.DeveloperToolbox " + notfiyKind.ToString(), ToolTipIcon.Info);

            if (null != MessageFired)
                MessageFired(message, new EventArgs());
        }
示例#5
0
        public void ShowNotification(DisabledKey item, NotifyKind notfiyKind, RegistryChangeInfo changeInfo)
        {
            if (_parent.FirstRun)
            {
                return;
            }
            string message = GetMessage(notfiyKind);

            switch (notfiyKind)
            {
            case NotifyKind.DisabledItemNew:
                NewDeactivatedElementInfo newInfo = (NewDeactivatedElementInfo)changeInfo;
                message = string.Format(message, newInfo.OfficeProductVersion, newInfo.Name, Environment.NewLine);
                break;

            case NotifyKind.DisabledItemDelete:
                DeleteDeactivatedElementInfo deleteInfo = (DeleteDeactivatedElementInfo)changeInfo;
                message = string.Format(message, deleteInfo.OfficeProductVersion, deleteInfo.Name, Environment.NewLine);
                break;

            default:
                throw new ArgumentOutOfRangeException(notfiyKind.ToString() + " is not valid in this context");
            }

            if (_parent.NotifyType == NotificationType.MessageBox)
            {
                MessageBox.Show(message, "NetOffice.DeveloperToolbox", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                _trayIcon.ShowBalloonTip(2000, message, "NetOffice.DeveloperToolbox " + notfiyKind.ToString(), ToolTipIcon.Info);
            }

            if (null != MessageFired)
            {
                MessageFired(message, new EventArgs());
            }
        }
示例#6
0
        internal NotifyKind CheckChangedValues(ref RegistryChangeInfo changeInfos)
        {
            try
            {
                bool openModeWrite = true;
                if ((_parent.RootKey == Registry.LocalMachine) && (_root.ReadOnlyModeForMachineKeys))
                {
                    openModeWrite = false;
                }

                RegistryKey key = _parent.RootKey.OpenSubKey(_registryPath, openModeWrite);
                if (null != key)
                {
                    string[] valueNames = key.GetValueNames();
                    int      valueCount = key.ValueCount;
                    if (valueCount != _valueCount)
                    {
                        _root.RaisePropertyChanged(Parent);
                        NotifyKind returnKind;
                        if (valueCount > _valueCount)
                        {
                            AddinValuesIncrementInfo incrementInfo = new AddinValuesIncrementInfo();
                            incrementInfo.RootKey   = _parent.RootKey;
                            incrementInfo.KeyPath   = _registryPath;
                            incrementInfo.KeyName   = _parent.Name;
                            incrementInfo.ValueName = GetNewValueName(valueNames, _valueNames);
                            _valueNames             = valueNames;
                            _valueKinds.Add(incrementInfo.ValueName, key.GetValueKind(incrementInfo.ValueName));
                            _values.Add(incrementInfo.ValueName, key.GetValue(incrementInfo.ValueName));
                            changeInfos = incrementInfo;
                            returnKind  = NotifyKind.AddinValuesIncrement;
                        }
                        else
                        {
                            AddinValuesDecrementInfo decrementInfo = new AddinValuesDecrementInfo();
                            decrementInfo.RootKey   = _parent.RootKey;
                            decrementInfo.KeyPath   = _registryPath;
                            decrementInfo.KeyName   = _parent.Name;
                            decrementInfo.ValueName = GetDeletedValueName(valueNames, _valueNames);
                            _valueKinds.Remove(decrementInfo.ValueName);
                            _values.Remove(decrementInfo.ValueName);
                            changeInfos = decrementInfo;
                            returnKind  = NotifyKind.AddinValuesDecrement;
                        }
                        _valueNames = valueNames;
                        _valueCount = valueCount;
                        key.Close();
                        return(returnKind);
                    }
                    else
                    {
                        foreach (string item in valueNames)
                        {
                            // name changed
                            if (!AddinsKey.Contains(_valueNames, item))
                            {
                                _root.RaisePropertyChanged(_parent);

                                key.Close();
                                AddinValueNameChangedInfo nameInfo = new AddinValueNameChangedInfo();
                                nameInfo.RootKey      = _parent.RootKey;
                                nameInfo.KeyPath      = _registryPath;
                                nameInfo.KeyName      = _parent.Name;
                                nameInfo.NewValueName = item;
                                nameInfo.OldValueName = GetChangedValueName(valueNames, _valueNames);
                                _valueNames           = valueNames;
                                RegistryValueKind refreshKind;
                                object            refreshValue = null;
                                _valueKinds.TryGetValue(nameInfo.OldValueName, out refreshKind);
                                _values.TryGetValue(nameInfo.OldValueName, out refreshValue);
                                _valueKinds.Remove(nameInfo.OldValueName);
                                _values.Remove(nameInfo.OldValueName);
                                _valueKinds.Add(nameInfo.NewValueName, refreshKind);
                                _values.Add(nameInfo.NewValueName, refreshValue);
                                changeInfos = nameInfo;

                                return(NotifyKind.AddinValueNameIsChanged);
                            }

                            // value changed
                            object value    = key.GetValue(item, null);
                            object oldValue = null;
                            _values.TryGetValue(item, out oldValue);
                            if (!AddinsKey.IsEqual(value, oldValue))
                            {
                                if ((_root.RestoreLastLoadBehavior) && (item == "LoadBehavior") && (!_root.FirstRun) && (true == openModeWrite) && (true == IsRestoreSituation(oldValue, value)))
                                {
                                    key.SetValue("LoadBehavior", oldValue);
                                    key.Close();
                                    AddinValueValueRestoredInfo restoredInfo = new AddinValueValueRestoredInfo();
                                    restoredInfo.RootKey       = _parent.RootKey;
                                    restoredInfo.KeyPath       = _registryPath;
                                    restoredInfo.KeyName       = _parent.Name;
                                    restoredInfo.ValueName     = item;
                                    restoredInfo.OldValue      = value;
                                    restoredInfo.RestoredValue = oldValue;
                                    changeInfos = restoredInfo;
                                    return(NotifyKind.AddinLoadBehaviorRestored);
                                }
                                else
                                {
                                    _root.RaisePropertyChanged(_parent);
                                    _values[item] = value;
                                    key.Close();
                                    AddinValueValueChangedInfo valueInfo = new AddinValueValueChangedInfo();
                                    valueInfo.RootKey   = _parent.RootKey;
                                    valueInfo.KeyPath   = _registryPath;
                                    valueInfo.KeyName   = _parent.Name;
                                    valueInfo.ValueName = item;
                                    valueInfo.NewValue  = value;
                                    valueInfo.OldValue  = oldValue;
                                    changeInfos         = valueInfo;
                                    return(NotifyKind.AddinValueIsChanged);
                                }
                            }

                            // kind changed
                            RegistryValueKind kind = key.GetValueKind(item);
                            RegistryValueKind oldkind;
                            _valueKinds.TryGetValue(item, out oldkind);
                            if (!AddinsKey.IsEqual(kind, oldkind))
                            {
                                _root.RaisePropertyChanged(_parent);
                                _valueKinds[item] = kind;
                                key.Close();

                                AddinValueKindChangedInfo kindInfo = new AddinValueKindChangedInfo();
                                kindInfo.RootKey      = _parent.RootKey;
                                kindInfo.KeyPath      = _registryPath;
                                kindInfo.KeyName      = _parent.Name;
                                kindInfo.ValueName    = item;
                                kindInfo.NewValueKind = kind;
                                kindInfo.OldValueKind = oldkind;
                                changeInfos           = kindInfo;
                                return(NotifyKind.AddinValueKindIsChanged);
                            }
                        }
                        key.Close();
                    }
                }
                return(NotifyKind.Nothing);
            }
            catch (System.Security.SecurityException exception)
            {
                throw new Exception("", exception);
            }
        }
示例#7
0
        internal NotifyKind CheckChangedSubKeys(ref RegistryChangeInfo changeInfo)
        {
            RegistryKey key = _rootKey.OpenSubKey(_registryPath);

            if (null != key)
            {
                string[] subKeyNames = key.GetSubKeyNames();
                int      subKeyCount = key.SubKeyCount;
                if (subKeyCount != _subKeyCount)
                {
                    int oldSubKeyCount = _subKeyCount;
                    _subKeyCount = subKeyCount;
                    key.Close();
                    _parent.RaisePropertyChanged(this);

                    NotifyKind returnKind = NotifyKind.Nothing;
                    if ((subKeyCount > oldSubKeyCount) && (!_parent.FirstRun))
                    {
                        AddinSubkeysIncrementInfo newKeyInfo = new AddinSubkeysIncrementInfo();
                        newKeyInfo.RootKey = _rootKey;
                        newKeyInfo.KeyPath = _registryPath;
                        newKeyInfo.KeyName = GetNewValueName(subKeyNames, _subKeyNames);
                        changeInfo         = newKeyInfo;
                        _subKeyNames       = subKeyNames;
                        returnKind         = NotifyKind.AddinSubKeysIncrement;
                    }
                    else if (!_parent.FirstRun)
                    {
                        AddinSubkeysDecrementInfo deleteKeyInfo = new AddinSubkeysDecrementInfo();
                        deleteKeyInfo.RootKey = _rootKey;
                        deleteKeyInfo.KeyPath = _registryPath;
                        deleteKeyInfo.KeyName = GetDeletedValueName(subKeyNames, _subKeyNames);
                        changeInfo            = deleteKeyInfo;
                        _subKeyNames          = subKeyNames;
                        returnKind            = NotifyKind.AddinSubKeysDecrement;
                    }
                    return(returnKind);
                }
                else
                {
                    NotifyKind returnKind = NotifyKind.Nothing;
                    foreach (string item in subKeyNames)
                    {
                        if (!Contains(_subKeyNames, item))
                        {
                            _parent.RaisePropertyChanged(this);
                            if (!_parent.FirstRun)
                            {
                                AddinSubkeyNameChangedInfo nameInfo = new AddinSubkeyNameChangedInfo();
                                nameInfo.RootKey    = _rootKey;
                                nameInfo.KeyPath    = _registryPath;
                                nameInfo.OldKeyName = item;
                                nameInfo.NewKeyName = GetChangedValueName(subKeyNames, _subKeyNames);
                                changeInfo          = nameInfo;
                                _subKeyNames        = subKeyNames;
                                returnKind          = NotifyKind.AddinSubKeyNameChanged;
                            }
                            break;
                        }
                    }
                    _subKeyNames = subKeyNames;
                    key.Close();
                    return(returnKind);
                }
            }
            return(NotifyKind.Nothing);
        }
示例#8
0
        internal NotifyKind CheckChangedValueCount(ref RegistryChangeInfo changeInfos)
        {
            RegistryKey key = _rootKey.OpenSubKey(_registryPath);

            if (null == key)
            {
                bool found = false;
                foreach (string keyExists in _keyExists)
                {
                    if (keyExists == (RootKey.ToString() + "\\" + _registryPath))
                    {
                        found = true;
                        break;
                    }
                }
                if (found)
                {
                    _parent.RaisePropertyChanged(this);
                    _keyExists.Remove(RootKey.ToString() + "\\" + _registryPath);
                }
            }
            else
            {
                bool found = false;
                foreach (string keyExists in _keyExists)
                {
                    if (keyExists == (RootKey.ToString() + "\\" + _registryPath))
                    {
                        found = true;
                        break;
                    }
                }
                if (!found)
                {
                    _keyExists.Add(RootKey.ToString() + "\\" + _registryPath);
                }

                string[] valueNames = key.GetValueNames();
                int      valueCount = key.ValueCount;
                if (valueCount != _lastValueCount)
                {
                    _parent.RaisePropertyChanged(this);

                    NotifyKind returnKind;
                    if ((valueCount > _lastValueCount) && (!_parent.FirstRun))
                    {
                        NewDeactivatedElementInfo newElementInfo = new NewDeactivatedElementInfo();
                        newElementInfo.RootKey = _rootKey;
                        newElementInfo.KeyPath = _registryPath;

                        string newValueName = GetNewValueName(valueNames, _valueNames);
                        object regValue     = key.GetValue(newValueName, null);
                        regValue            = DisabledValue.ConvertDisabledItemValueName(regValue, newValueName);
                        newElementInfo.Name = regValue as string;
                        newElementInfo.OfficeProductVersion = OfficeProductVersion;
                        changeInfos = newElementInfo;
                        _valueNames = valueNames;
                        returnKind  = NotifyKind.DisabledItemNew;
                    }
                    else if (!_parent.FirstRun)
                    {
                        DeleteDeactivatedElementInfo deleteElementInfo = new DeleteDeactivatedElementInfo();
                        deleteElementInfo.RootKey = _rootKey;
                        deleteElementInfo.KeyPath = _registryPath;
                        deleteElementInfo.Name    = GetDeletedValueName(valueNames, _valueNames);

                        string convertedName = null;
                        _convertedNames.TryGetValue(deleteElementInfo.Name, out convertedName);
                        _convertedNames.Remove(deleteElementInfo.Name);
                        deleteElementInfo.Name = convertedName;

                        deleteElementInfo.OfficeProductVersion = OfficeProductVersion;
                        changeInfos = deleteElementInfo;
                        _valueNames = valueNames;
                        returnKind  = NotifyKind.DisabledItemDelete;
                    }
                    else
                    {
                        foreach (string name in valueNames)
                        {
                            string existingName = null;
                            _convertedNames.TryGetValue(name, out existingName);
                            if (null == existingName)
                            {
                                object regValue = key.GetValue(name, null);
                                regValue = DisabledValue.ConvertDisabledItemValueName(regValue, name);
                                _convertedNames.Add(name, regValue as string);
                            }
                        }
                        returnKind = NotifyKind.Nothing;
                    }


                    _lastValueCount = valueCount;
                    return(returnKind);
                }
                _valueNames = valueNames;
                key.Close();
            }
            return(NotifyKind.Nothing);
        }
示例#9
0
        internal NotifyKind CheckChangedValueCount(ref RegistryChangeInfo changeInfos)
        {
            RegistryKey key = _rootKey.OpenSubKey(_registryPath);
            if (null == key)
            {
                bool found = false;
                foreach (string keyExists in _keyExists)
                {
                    if (keyExists == (RootKey.ToString() + "\\" + _registryPath))
                    {
                        found = true;
                        break;
                    }
                }
                if (found)
                { 
                    _parent.RaisePropertyChanged(this);
                    _keyExists.Remove(RootKey.ToString() + "\\" + _registryPath);
                }
            }
            else 
            { 
                bool found = false;
                foreach (string keyExists in _keyExists)
                {
                    if(keyExists == (RootKey.ToString() +"\\" + _registryPath))
                    {
                        found = true;
                        break;
                    }
                }
                if(!found)
                    _keyExists.Add(RootKey.ToString() + "\\" + _registryPath);

                string[] valueNames = key.GetValueNames();
                int valueCount = key.ValueCount;
                if (valueCount != _lastValueCount)
                {
                    _parent.RaisePropertyChanged(this);

                    NotifyKind returnKind;
                    if ((valueCount > _lastValueCount) && (!_parent.FirstRun))
                    {
                        NewDeactivatedElementInfo newElementInfo = new NewDeactivatedElementInfo();
                        newElementInfo.RootKey = _rootKey;
                        newElementInfo.KeyPath = _registryPath;

                        string newValueName = GetNewValueName(valueNames, _valueNames);
                        object regValue = key.GetValue(newValueName, null);
                        regValue = DisabledValue.ConvertDisabledItemValueName(regValue, newValueName);
                        newElementInfo.Name = regValue as string;
                        newElementInfo.OfficeProductVersion = OfficeProductVersion;
                        changeInfos = newElementInfo;
                        _valueNames = valueNames;
                        returnKind = NotifyKind.DisabledItemNew;
                    }
                    else if (!_parent.FirstRun)
                    {
                        DeleteDeactivatedElementInfo deleteElementInfo = new DeleteDeactivatedElementInfo();
                        deleteElementInfo.RootKey = _rootKey;
                        deleteElementInfo.KeyPath = _registryPath;
                        deleteElementInfo.Name = GetDeletedValueName(valueNames, _valueNames);

                        string convertedName = null;
                        _convertedNames.TryGetValue(deleteElementInfo.Name, out convertedName);
                        _convertedNames.Remove(deleteElementInfo.Name);
                        deleteElementInfo.Name = convertedName;

                        deleteElementInfo.OfficeProductVersion = OfficeProductVersion;
                        changeInfos = deleteElementInfo;
                        _valueNames = valueNames;
                        returnKind = NotifyKind.DisabledItemDelete;
                    }
                    else
                    {
                        foreach (string name in valueNames)
                        {
                            string existingName = null;
                            _convertedNames.TryGetValue(name, out existingName);
                            if (null == existingName)
                            {
                                object regValue = key.GetValue(name, null);
                                regValue = DisabledValue.ConvertDisabledItemValueName(regValue, name);
                                _convertedNames.Add(name, regValue as string);
                            }
                        }
                        returnKind = NotifyKind.Nothing;
                    }


                    _lastValueCount = valueCount;
                    return returnKind;
                }
                _valueNames = valueNames;
                key.Close();
            }
            return NotifyKind.Nothing;
        }
示例#10
0
        internal NotifyKind CheckChangedValues(ref RegistryChangeInfo changeInfos)
        {
            try
            {
                bool openModeWrite = true;
                if ((_parent.RootKey == Registry.LocalMachine) && (_root.ReadOnlyModeForMachineKeys))
                    openModeWrite = false;

                RegistryKey key = _parent.RootKey.OpenSubKey(_registryPath, openModeWrite);
                if (null != key)
                {
                    string[] valueNames = key.GetValueNames();
                    int valueCount = key.ValueCount;
                    if (valueCount != _valueCount)
                    {
                        _root.RaisePropertyChanged(Parent);
                        NotifyKind returnKind;
                        if (valueCount > _valueCount)
                        {
                            AddinValuesIncrementInfo incrementInfo = new AddinValuesIncrementInfo();
                            incrementInfo.RootKey = _parent.RootKey;
                            incrementInfo.KeyPath = _registryPath;
                            incrementInfo.KeyName = _parent.Name;
                            incrementInfo.ValueName = GetNewValueName(valueNames, _valueNames);
                            _valueNames = valueNames;
                            _valueKinds.Add(incrementInfo.ValueName, key.GetValueKind(incrementInfo.ValueName));
                            _values.Add(incrementInfo.ValueName, key.GetValue(incrementInfo.ValueName));
                            changeInfos = incrementInfo;
                            returnKind = NotifyKind.AddinValuesIncrement;
                        }
                        else
                        {
                            AddinValuesDecrementInfo decrementInfo = new AddinValuesDecrementInfo();
                            decrementInfo.RootKey = _parent.RootKey;
                            decrementInfo.KeyPath = _registryPath;
                            decrementInfo.KeyName = _parent.Name;
                            decrementInfo.ValueName = GetDeletedValueName(valueNames, _valueNames);
                            _valueKinds.Remove(decrementInfo.ValueName);
                            _values.Remove(decrementInfo.ValueName);
                            changeInfos = decrementInfo;
                            returnKind = NotifyKind.AddinValuesDecrement;
                        }
                        _valueNames = valueNames;
                        _valueCount = valueCount;
                        key.Close();
                        return returnKind;
                    }
                    else
                    {
                        foreach (string item in valueNames)
                        {
                            // name changed
                            if (!AddinsKey.Contains(_valueNames, item))
                            {
                                _root.RaisePropertyChanged(_parent);

                                key.Close();
                                AddinValueNameChangedInfo nameInfo = new AddinValueNameChangedInfo();
                                nameInfo.RootKey = _parent.RootKey;
                                nameInfo.KeyPath = _registryPath;
                                nameInfo.KeyName = _parent.Name;
                                nameInfo.NewValueName = item;
                                nameInfo.OldValueName = GetChangedValueName(valueNames, _valueNames);
                                _valueNames = valueNames;
                                RegistryValueKind refreshKind;
                                object refreshValue = null;
                                _valueKinds.TryGetValue(nameInfo.OldValueName, out refreshKind);
                                _values.TryGetValue(nameInfo.OldValueName, out refreshValue);
                                _valueKinds.Remove(nameInfo.OldValueName);
                                _values.Remove(nameInfo.OldValueName);
                                _valueKinds.Add(nameInfo.NewValueName, refreshKind);
                                _values.Add(nameInfo.NewValueName, refreshValue);
                                changeInfos = nameInfo;

                                return NotifyKind.AddinValueNameIsChanged;
                            }

                            // value changed
                            object value = key.GetValue(item, null);
                            object oldValue = null;
                            _values.TryGetValue(item, out oldValue);
                            if (!AddinsKey.IsEqual(value, oldValue))
                            {

                                if ((_root.RestoreLastLoadBehavior) && (item == "LoadBehavior") && (!_root.FirstRun) && (true == openModeWrite) && (true == IsRestoreSituation(oldValue, value)))                                
                                {
                                    key.SetValue("LoadBehavior", oldValue);
                                    key.Close();
                                    AddinValueValueRestoredInfo restoredInfo = new AddinValueValueRestoredInfo();
                                    restoredInfo.RootKey = _parent.RootKey;
                                    restoredInfo.KeyPath = _registryPath;
                                    restoredInfo.KeyName = _parent.Name;
                                    restoredInfo.ValueName = item;
                                    restoredInfo.OldValue = value;
                                    restoredInfo.RestoredValue = oldValue;
                                    changeInfos = restoredInfo;
                                    return NotifyKind.AddinLoadBehaviorRestored;
                                }
                                else
                                {
                                    _root.RaisePropertyChanged(_parent);
                                    _values[item] = value;
                                    key.Close();
                                    AddinValueValueChangedInfo valueInfo = new AddinValueValueChangedInfo();
                                    valueInfo.RootKey = _parent.RootKey;
                                    valueInfo.KeyPath = _registryPath;
                                    valueInfo.KeyName = _parent.Name;
                                    valueInfo.ValueName = item;
                                    valueInfo.NewValue = value;
                                    valueInfo.OldValue = oldValue;
                                    changeInfos = valueInfo;
                                    return NotifyKind.AddinValueIsChanged;
                                }
                            }

                            // kind changed
                            RegistryValueKind kind = key.GetValueKind(item);
                            RegistryValueKind oldkind;
                            _valueKinds.TryGetValue(item, out oldkind);
                            if (!AddinsKey.IsEqual(kind, oldkind))
                            {
                                _root.RaisePropertyChanged(_parent);
                                _valueKinds[item] = kind;
                                key.Close();

                                AddinValueKindChangedInfo kindInfo = new AddinValueKindChangedInfo();
                                kindInfo.RootKey = _parent.RootKey;
                                kindInfo.KeyPath = _registryPath;
                                kindInfo.KeyName = _parent.Name;
                                kindInfo.ValueName = item;
                                kindInfo.NewValueKind = kind;
                                kindInfo.OldValueKind = oldkind;
                                changeInfos = kindInfo;
                                return NotifyKind.AddinValueKindIsChanged;
                            }
                        }
                        key.Close();
                    }

                }
                return NotifyKind.Nothing;
            }
            catch (System.Security.SecurityException exception)
            {
                throw new Exception("", exception);
            }
        }
示例#11
0
        internal NotifyKind CheckChangedSubKeys(ref RegistryChangeInfo changeInfo)
        {
            RegistryKey key = _rootKey.OpenSubKey(_registryPath);
            if (null != key)
            {
                string[] subKeyNames = key.GetSubKeyNames();
                int subKeyCount = key.SubKeyCount;
                if(subKeyCount != _subKeyCount)
                {
                    int oldSubKeyCount = _subKeyCount;
                    _subKeyCount = subKeyCount;
                    key.Close();
                    _parent.RaisePropertyChanged(this);

                    NotifyKind returnKind = NotifyKind.Nothing;
                    if ((subKeyCount > oldSubKeyCount) && (!_parent.FirstRun))
                    {
                        AddinSubkeysIncrementInfo newKeyInfo = new AddinSubkeysIncrementInfo();
                        newKeyInfo.RootKey = _rootKey;
                        newKeyInfo.KeyPath = _registryPath;
                        newKeyInfo.KeyName =  GetNewValueName(subKeyNames, _subKeyNames);
                        changeInfo = newKeyInfo;
                        _subKeyNames = subKeyNames;
                        returnKind = NotifyKind.AddinSubKeysIncrement;
                    }
                    else if(!_parent.FirstRun)
                    {
                        AddinSubkeysDecrementInfo deleteKeyInfo = new AddinSubkeysDecrementInfo();
                        deleteKeyInfo.RootKey = _rootKey;
                        deleteKeyInfo.KeyPath = _registryPath;
                        deleteKeyInfo.KeyName = GetDeletedValueName(subKeyNames, _subKeyNames);
                        changeInfo = deleteKeyInfo;
                        _subKeyNames = subKeyNames;
                        returnKind = NotifyKind.AddinSubKeysDecrement;
                    }
                    return returnKind;
                }
                else
                {
                    NotifyKind returnKind = NotifyKind.Nothing;
                    foreach (string item in subKeyNames)
                    {
                        if (!Contains(_subKeyNames, item))
                        {
                            _parent.RaisePropertyChanged(this);
                            if (!_parent.FirstRun)
                            { 
                                AddinSubkeyNameChangedInfo nameInfo = new AddinSubkeyNameChangedInfo();
                                nameInfo.RootKey = _rootKey;
                                nameInfo.KeyPath = _registryPath;
                                nameInfo.OldKeyName = item;
                                nameInfo.NewKeyName = GetChangedValueName(subKeyNames, _subKeyNames);
                                changeInfo = nameInfo;
                                _subKeyNames = subKeyNames;
                                returnKind = NotifyKind.AddinSubKeyNameChanged;
                            }
                            break;
                        }
                    }
                    _subKeyNames = subKeyNames;
                    key.Close();
                    return returnKind;
                }
            }
            return NotifyKind.Nothing;
        }