我承认我是C#的新手。我正在努力创建一个使用.NET删除注册表项的方法。该方法采用一个字符串参数,其中包含要删除的完整密钥。以下是我正在尝试做的一些不起作用的样本(显然):
namespace NameHere
{
class Program
{
static void Main(string[] args)
{
RegistryKey hklm = Registry.LocalMachine;
hklm = hklm.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\")
string strKey=”Test123”;
string fullPath = hklm + "\\" + strKey;
deleteRegKey(fullPath);
}
static void deleteRegKey(string keyName)
{
Registry.LocalMachine.DeleteSubKey(keyName);
}
}
}
我已经尝试了一些其他的迭代并用谷歌搜索解决方案,但到目前为止,还没有将各个部分放在一起。任何帮助将不胜感激。此外,任何解释为什么我的跛脚尝试无法帮助澄清我的知识差距将是很棒的。
答案 0 :(得分:2)
我相信你有太多了。试试这个:
RegistryKey hklm = Registry.LocalMachine;
hklm = hklm.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\")
string strKey=”Test123”;
string fullPath = hklm + strKey;
deleteRegKey(fullPath);
答案 1 :(得分:2)
这个例程应该是一个单行,例如:
Registry.LocalMachine.DeleteSubKey(@“SYSTEM \ ControlSet ... \ etc ...”);
您不需要打开RegistryKey对象,因为Registry.LocalMachine已经为您打开了。
如果你确实需要打开一个RegistryKey对象来做其他事情,请注意RegistryKey实现了IDisposable,所以现在你已经创建了一个对象,无论如何都要负责处理它。因此,您必须使用尝试{...} 来包围您的代码,并在 finally 块中调用Dispose()。幸运的是,使用使用:
可以更优雅地使用C#编码using( RegistryKey key = Registry.LocalMachine.OpenSubKey(...) ) {
...
}
答案 2 :(得分:1)
我认为@Correl有它。
但帮助您调试的一种方法是使用this form of DeleteSubkey:
public void DeleteSubKey(
string subkey,
bool throwOnMissingSubKey
)
而不是只用一个参数调用的那个,并将true作为第二个参数传递。那样,如果
...指定的子项不存在,然后引发异常。
您获得的例外情况是ArgumentException。