如何删除注册表项?
我想删除一些注册表项,而是VS不断告诉我,我不能在注册表项中写,我不明白为什么:如何删除注册表项?
public void refInstall()
{
RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Installer\Folders\MyApp");
foreach(string subKeyName in regKey.GetValueNames())
{
bool exist = Directory.Exists(subKeyName);
if (!exist)
{
regKey.DeleteSubKeyTree(subKeyName);
Console.WriteLine(subKeyName + ": N'EXISTE PAS");
}
}
}
}
您不必HKLM写访问。您需要使用提升的权限运行才能成功。
一直以来,HKLM的权利一直只限于管理员组的成员。当UAC推出时,用户习惯性地在没有管理员权限的情况下开始运行,这种情况在Vista中发生了变化。
它可能不是你想听到的,但你需要摆脱写入注册表这个区域的习惯,并找到一种不同的方式来实现你的目标。对于桌面应用程序来说,期望对HKLM(或确实是Program Files目录)进行写入访问的唯一时间是安装时。
一旦按照arx所述修复代码,就必须解决此问题。
我是管理员,当我在调试文件夹“以管理员身份”运行.exe时,它崩溃了...... – darky89 2011-03-07 19:30:01
管理员用户在默认情况下没有对HKLM的写入权限。在UAC下,它们使用受限权限令牌运行。他们必须明确提升流程才能获得充分的权利。但重要的是,你必须改变你的习惯。 – 2011-03-07 19:31:18
这有一个明显的问题:
您是通过注册表值迭代但试图删除它们,好像他们是键。
如果要使用值使用RegistryKey.DeleteValue
。
如果你想使用密钥使用RegistryKey.GetSubKeyNames
。
另一个问题:
您正在以只读访问打开注册表项。你需要(注意末尾有额外的布尔):(演戏的文件系统上Directory.Exists删除评论这是经过深思熟虑的darky89如下解释。)
RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Installer\Folders\MyApp", true);
什么返回实际的错误? – 2011-03-07 19:27:30
你能提供确切的错误吗?其次是你作为管理员运行Visual Studio?试试看。 – 2011-03-07 19:27:53
确切的错误:“UnauthorizedAcessPermission:不可能写在注册表键”(或类似的东西,我正在法国^^运行VS) – darky89 2011-03-07 19:32:20