以编程方式更新注册表设置的风险是什么?

时间:2012-12-12 05:55:06

标签: c# windows internet-explorer winapi registry

我正在尝试使用C#以编程方式将代理设置更改为Internet Explorer的已启用/已禁用。这是为了在需要代理的网站之间进行处理。

我的代码:

string key = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";

RegistryKey RegKey = Registry.CurrentUser.OpenSubKey(key, true);
RegKey.SetValue("ProxyEnable", 1);

我提到的更新注册表的大多数文章表明存在这样做的风险。

我想知道

  1. 执行上述代码涉及的风险是什么

  2. 我是否可以采取任何措施来弥补风险。例如,为特定密钥进行注册表备份。

2 个答案:

答案 0 :(得分:1)

更改注册表的风险很简单,您可能会损坏系统。如果您真的想在客户机器上运行它:

  • 阅读有关您更改的注册表项的所有文档
  • 考虑到不同的Windows版本和不同的产品版本可能有不同的注册表项
  • 询问曾经改变过这些价值观的人
  • 确保您的应用程序具有执行此操作的权限(例如:以管理员身份运行,这不应该用于常规用途。仅限于安装程序中。)
  • 确保您可以卸载更改

答案 1 :(得分:1)

注册管理机构是由操作系统控制的环境,可能会受到无法预料的更新。我认为主要的风险是无法知道您的数据究竟发生了什么(例如:如果Windows认为重置或覆盖您的值是个好主意,那么您将失去所有这些。)

此外,就像有人在对另一个答案的评论中所说,无效的条目可能会导致数据丢失,尤其是当您的数据超过注册管理机构允许的最大长度时。

如果需要修改注册表,可以测试密钥是否存在并在覆盖之前保留原始值的跟踪。当然,您需要确保更改密钥不会产生意外影响。