Exemplo n.º 1
0
        public void RegistryWatcher100Keys() {
            string keyName = "RegistryWatcher100Keys";

            for (int i = 0; i < 100; ++i) {
                SetValue(string.Format("{0}\\Key{1}", keyName, i), "Value", "ABC");
            }

            using (var watcher = new RegistryWatcher()) {
                var args = new RegistryChangedEventArgs[100];
                var argsSet = args.Select(_ => new ManualResetEventSlim()).ToArray();
                var tokens = new object[100];

                for (int i = 0; i < 100; ++i) {
                    tokens[i] = AddWatch(watcher, string.Format("{0}\\Key{1}", keyName, i),
                        new ArgSetter(args, argsSet, i).Raised);
                }

                // Change the first value
                SetValue(keyName + "\\Key0", "Value", "DEF");
                Assert.IsTrue(argsSet[0].Wait(TIMEOUT));
                Assert.IsNotNull(args[0]);
                Assert.AreEqual(GetKey(keyName + "\\Key0"), args[0].Key);
                argsSet[0].Reset();
                args[0] = null;

                // Change the last value
                SetValue(keyName + "\\Key99", "Value", "DEF");
                Assert.IsTrue(argsSet[99].Wait(TIMEOUT));
                Assert.IsNotNull(args[99]);
                Assert.AreEqual(GetKey(keyName + "\\Key99"), args[99].Key);
                argsSet[99].Reset();
                args[99] = null;

                watcher.Remove(tokens[0]);
                watcher.Remove(tokens[99]);

                // Change the first value
                SetValue(keyName + "\\Key0", "Value", "GHI");
                Assert.IsFalse(argsSet[0].Wait(TIMEOUT));
                Assert.IsNull(args[0]);

                // Change the last value
                SetValue(keyName + "\\Key99", "Value", "GHI");
                Assert.IsFalse(argsSet[99].Wait(TIMEOUT));
                Assert.IsNull(args[99]);
            }
        }
Exemplo n.º 2
0
        public void RegistryWatcherUpdateNonRecursive() {
            string keyName = "RegistryWatcherUpdateNonRecursive";

            SetValue(keyName, "TestValue", "ABC");
            SetValue(keyName + "\\TestKey", "Value", 123);

            using (var watcher = new RegistryWatcher()) {
                RegistryChangedEventArgs args = null;
                var argsSet = new ManualResetEventSlim();

                var watch1 = AddWatch(watcher, keyName,
                    e => { args = e; argsSet.Set(); });

                // Value is set, but does not actually change
                SetValue(keyName, "TestValue", "ABC");
                Assert.IsFalse(argsSet.Wait(TIMEOUT));
                Assert.IsNull(args);

                // Value is changed
                SetValue(keyName, "TestValue", "DEF");
                Assert.IsTrue(argsSet.Wait(TIMEOUT));
                Assert.IsNotNull(args);
                Assert.AreEqual(GetKey(keyName), args.Key);
                argsSet.Reset();
                args = null;

                // Value in subkey is changed, but we don't notice
                SetValue(keyName + "\\TestKey", "Value", 456);
                Assert.IsFalse(argsSet.Wait(TIMEOUT));
                Assert.IsNull(args);

                watcher.Remove(watch1);

                // Value is changed back, but we don't get notified
                SetValue(keyName, "TestValue", "ABC");
                Assert.IsFalse(argsSet.Wait(TIMEOUT));
                Assert.IsNull(args);

                // Value in subkey is changed back, but we don't notice
                SetValue(keyName + "\\TestKey", "Value", 123);
                Assert.IsFalse(argsSet.Wait(TIMEOUT));
                Assert.IsNull(args);
            }
        }
Exemplo n.º 3
0
        public void RegistryWatcherDeleteRecursive() {
            string keyName = "RegistryWatcherDeleteRecursive";

            SetValue(keyName, "TestValue1", "ABC");
            SetValue(keyName, "TestValue2", "DEF");
            SetValue(keyName, "TestValue3", "GHI");
            SetValue(keyName + "\\TestKey1", "Value", 123);
            SetValue(keyName + "\\TestKey2", "Value", 456);

            using (var watcher = new RegistryWatcher()) {
                RegistryChangedEventArgs args = null;
                var argsSet = new ManualResetEventSlim();

                var watch1 = AddWatch(watcher, keyName,
                    e => { args = e; argsSet.Set(); },
                    recursive: true);

                // Value is deleted
                DeleteValue(keyName, "TestValue2");
                Assert.IsTrue(argsSet.Wait(TIMEOUT));
                Assert.IsNotNull(args);
                Assert.AreEqual(GetKey(keyName), args.Key);
                argsSet.Reset();
                args = null;

                // Value in subkey is deleted
                DeleteValue(keyName + "\\TestKey1", "Value");
                Assert.IsTrue(argsSet.Wait(TIMEOUT));
                Assert.IsNotNull(args);
                Assert.AreEqual(GetKey(keyName), args.Key);
                argsSet.Reset();
                args = null;

                // Subkey is deleted
                DeleteKey(keyName + "\\TestKey1");
                Assert.IsTrue(argsSet.Wait(TIMEOUT));
                Assert.IsNotNull(args);
                Assert.AreEqual(GetKey(keyName), args.Key);
                argsSet.Reset();
                args = null;

                watcher.Remove(watch1);

                // Another value is deleted, but we don't get notified
                DeleteValue(keyName, "TestValue3");
                Assert.IsFalse(argsSet.Wait(TIMEOUT));
                Assert.IsNull(args);

                // Another key is deleted, but we don't get notified
                DeleteKey(keyName + "\\TestKey2");
                Assert.IsFalse(argsSet.Wait(TIMEOUT));
                Assert.IsNull(args);
            }
        }