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()); }
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()); } }
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); } }
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()); }
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()); } }
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); } }
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); }
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); }
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; }
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); } }
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; }