मुझे एक अधिसूचना चाहिए जब HKEY_CURRENT_USER
में एक विशिष्ट रजिस्ट्रीकी बदल दी गई हो। अब तक मुझे कोई सफलता के साथ WMI
के माध्यम से इस की कोशिश की:रजिस्ट्रीकी मान बदल दिया गया था जब अधिसूचना प्राप्त करें
var query = new WqlEventQuery(string.Format(
"SELECT * FROM RegistryKeyChangeEvent WHERE Hive='{0}' AND KeyPath='{1}' AND ValueName='{2}'",
hive, keyPath.Replace("\\","\\\\"), valueName));
_watcher = new ManagementEventWatcher(query);
_watcher.Scope.Path.NamespacePath = @"root\default";
_watcher.EventArrived += (sender, args) => KeyValueChanged();
_watcher.Start();
(त्रुटि था "नहीं मिला")
मेरी दूसरी दृष्टिकोण था WBEM Scripting COM component
बंदरगाह के इरादे के साथ ग # करने के लिए http://msdn.microsoft.com/en-us/library/aa393042(VS.85).aspx से उदाहरण का उपयोग लेकिन मुझे डब्लूबीईएम कॉम के लिए सी #
में यह http://www.codeproject.com/KB/system/registrymonitor.aspx वर्ग मिला, लेकिन यह मेरी आवश्यकताओं के अनुरूप नहीं था क्योंकि यह वर्ग केवल पूरी कुंजी पर नज़र रखता है और मुझे केवल एक विशिष्ट मान होने पर एक अधिसूचना चाहिए (टी में ValueName
के माध्यम से निर्दिष्ट वह उपरोक्त नमूने) बदल जाता है।
संपादित करें: यदि आप msdn vbscript उदाहरण में HKEY_CURRENT_USER
पर हाइव बदलते हैं, तो यह काम करना बंद कर देता है। मैं इस व्यवहार के बारे में कुछ भी लेकिन नहीं पा सके a link from 2003
EDIT2: HKEY_CLASSES_ROOT
और HKEY_CURRENT_USER
पित्ती को परिवर्तन ऐसे RegistryValueChangeEvent
के रूप में यह से ली गई RegistryEvent
या कक्षाएं, द्वारा समर्थित नहीं हैं। (MSDN)
पर "हैक" मुझे विश्वास है कि आप कोड-प्रोजेक्ट को संशोधित कई प्रतीक्षा हैंडल/मॉनीटर का उपयोग करने के लिए कोड कम से कम बताएं कि कौन सी कुंजी बदल दी गई है। मुझे यकीन नहीं है कि एन मॉनीटर के प्रभाव क्या हैं - ऐसा बुरा नहीं लगता है: http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx :-) –