Windows 读取子项中的特定注册表值,然后执行if exist/if not语句,这段代码有什么问题
在这个网站和dream in code的帮助下,我修复了我的错误,但现在代码似乎无法正常工作。代码如下: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");
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)代码>不,我实际上不想让它做消息框,那只是为了测试代码是否正常工作