C# 删除注册表项时出现问题

C# 删除注册表项时出现问题,c#,.net,registry,registrykey,C#,.net,Registry,Registrykey,我正在尝试删除注册表项,到目前为止,我尝试的代码似乎很正常: RegistryKey delete = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options"); delete.DeleteSubKeyTree("MyPaintApp"); delete.Close(); 但我得到

我正在尝试删除注册表项,到目前为止,我尝试的代码似乎很正常:

        RegistryKey delete = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options");
        delete.DeleteSubKeyTree("MyPaintApp");
        delete.Close();
但我得到了一个错误:

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
我在谷歌上搜索了我的问题,搜索了stackoverflow并应用了一些解决方案,但似乎都使用了我正在使用的相同方法,所以我受够了,我希望你能帮我解决这个问题


编辑:很抱歉,我在注册表项路径中使用了CurrentUser而不是LocalMachine,这就是问题所在。

OpenSubKey的文档说明:

返回值
类型:Microsoft.Win32.RegistryKey
请求的子项,如果操作失败,则为null

因此,打开钥匙似乎失败了。很可能是因为它不存在:

如果找不到指定的子项,则返回null

在我的Win7 comp上,
图像文件执行选项
子项不存在


但即使你修复了那个部分,它仍然会失败。您正在使用的
OpenSubKey
的重载记录如下:

以只读方式检索子项

因此,您应该使用
OpenSubKey(path,true)
,就像@lassespeholt建议的那样


请尝试使用注册表.CurrentUser.DeleteSubKeyTree(fullSubKeyPath)


此处的详细信息:.

是否
delete
null?插入断言或使用调试器。除了当前的null异常之外,在修改密钥时,您可能还应该使用
OpenSubKey(key,true)
。在提问之前,你为什么不先阅读一下你正在使用的函数的文档呢?关键在于HKLM,而不是HKCU。如果不请求UAC高程,也无法删除它。而且在64位版本的Windows上无法使用32位程序。这个键不应该被程序弄乱,只有人类应该编辑它。它有太多的副作用。