Windows 读取子项中的特定注册表值,然后执行if exist/if not语句,这段代码有什么问题

Windows 读取子项中的特定注册表值,然后执行if exist/if not语句,这段代码有什么问题,windows,registry,Windows,Registry,在这个网站和dream in code的帮助下,我修复了我的错误,但现在代码似乎无法正常工作。代码如下: using (RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\")) if (Key != null) { string val = (string)Key.GetValue("COMODO Internet Security");

在这个网站和dream in code的帮助下,我修复了我的错误,但现在代码似乎无法正常工作。代码如下:

using (RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\"))
if (Key != null)
{
    string val = (string)Key.GetValue("COMODO Internet Security");
    if (val == null)
    {
        MessageBox.Show("value not found");
    }
    else
    {
        // use the value
    }
}
else
{
    MessageBox.Show("key not found");
}

当我使用它的时候,它会给出一个“value not found”的消息框,如果它不存在的话,它应该是这样的,唯一的问题是这个值确实存在。。。我通过regedit手动检查。那么有什么问题吗?

可能您在从32位应用程序查询64位操作系统上的
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
项的注册表值时遇到问题。在这种情况下,只能在
HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
下看到值存在(请参阅)。如果使用非托管API(或invoce),则可以使用
RegOpenKeyEx
key\u QUERY\u VALUE | key\u WOW64\u 64 key
标志打开运行密钥(请参阅)。在使用
KEY\u QUERY\u VALUE | KEY\u WOW64\u 64KEY
标志之前,应测试应用程序是否在64位操作系统下运行。如果是32位操作系统,您应该只使用
KEY\u QUERY\u VALUE
标志。

您实际上是在执行此代码,还是某项服务,或者可能具有与您不同的权限?@pascal它的用途是:一旦某个特定程序关闭,我希望它检查是否存在特定的注册表值,如果它不存在,则我希望它删除特定文件夹;如果它存在,则我希望它不删除该特定文件夹。打印名称<代码>字符串[]名称=Key.GetValueNames();字符串buf=“值:”;foreach(名称中的字符串s){buf+=s+“,”;}MessageBox.Show(buf)不,我实际上不想让它做消息框,那只是为了测试代码是否正常工作