C#检查并删除注册表项问题

时间:2017-05-10 17:55:54

标签: c# windows registry

我正在尝试检查(并删除)注册表项。代码:

 RegistryKey registryKey = Registry.CurrentUser.OpenSubKey
                    ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

                string codeBase = Assembly.GetExecutingAssembly().CodeBase;


            if (registryKey != null)           //   <- !!!!!!!!! problem is here, i think
                {
                    registryKey.SetValue("MyApp", codeBase);
                }

                else
                {
                    registryKey.DeleteValue("MyApp");
                }

创建值后,应用程序看不到新值并且不会删除它。 这段代码出了什么问题?感谢。

1 个答案:

答案 0 :(得分:0)

您的if - else条件存在问题,您在注册表中添加和删除的操作看起来不错。如果要检查然后删除注册表项,则应该这样执行:

string KeyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
string valueName = "MyApp";
string codeBase = Assembly.GetExecutingAssembly().CodeBase;

if (Registry.GetValue(KeyName, valueName, null) != null)
{
     RegistryKey registryKey = Registry.CurrentUser
         .OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
     registryKey.DeleteValue(valueName);
}

Registry.GetValue(KeyName, valueName, null)是进行空检查而不是执行registryKey != null的更好方法,因为registryKey只获取..CurrentVersion\\Run子项。相反,您应该深入了解应用程序的实际密钥(例如MyApp)。

希望这有帮助!