我希望在HKEY_CURRENT_USER
更改特定RegistryKey输入时发出通知.到目前为止,我试过这个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();
Run Code Online (Sandbox Code Playgroud)
(错误是"未找到")
我的第二种方法是使用WBEM Scripting COM component
意图将示例从http://msdn.microsoft.com/en-us/library/aa393042(VS.85).aspx移植到c#,但我没有找到任何用法示例c#中的WBEM COM
我发现这个http://www.codeproject.com/KB/system/registrymonitor.aspx类,但它不符合我的需要,因为这个类只监视整个键,我只想要一个特定值的通知(指定通过ValueName
上面的示例)得到改变.
编辑:如果您HKEY_CURRENT_USER
在msdn vbscript示例中更改Hive ,它将停止工作.我找不到任何关于这种行为的信息,而是2003年的一个链接
EDIT2:不支持对其进行更改HKEY_CLASSES_ROOT
和从中派生的类,例如.(MSDN)HKEY_CURRENT_USER
RegistryEvent
RegistryValueChangeEvent
我最近阅读了Michael C. Feathers的书,Working effectively with legacy code
并提到了一种测试自动重构工具安全性的方法.
我的问题是:.net平台有没有安全的重构工具?; 这意味着只允许实际重构的工具,例如,在以下示例中不允许inline variable
对temp
变量进行重构,或者至少显示我正在更改逻辑的警告.
class Program
{
private static int _x;
static void Main()
{
int temp = Test();
for (int i = 0; i < 10; ++i)
{
Console.WriteLine(temp);
}
Console.ReadKey();
}
private static int Test()
{
return ++_x;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在重构工具Resharper
和Coderush + Refactor pro
最新版本上测试了这个例子,两者都未通过测试并允许重构:
class Program
{
private static int _x;
static void Main()
{
for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)