我有以下在 Windows 服务中运行的代码片段。
该服务监视 LAN 并相应地更改代理设置,问题是由于某种原因代理设置没有更新。
应用程序正在本地系统帐户下运行,但注册表仍然不会更改:
大家有什么想法吗?
using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true))
{
if (key != null)
{
key.SetValue("ProxyEnable", Convert.ToInt32(enable), RegistryValueKind.DWord);
//I/O Flushes
key.Flush();
key.Close();
return;
}
//Exception thrown here to test if key is valid.
}
最佳答案
如果您在本地系统帐户中运行,则没有 HKEY_Current_User。
事实上,在很多情况下,即使您以用户帐户运行服务,也不会有 HKEY_CURRENT_USER,因为该服务通常不会创建完整的 Windows Station——它只是使用用户帐户进行身份验证,而不是个人资料。
这是许多支持 COM 自动化的应用程序无法被服务使用的几个原因之一。
不过,您将能够访问 HKEY_LOCAL_MACHINE。
编辑 如果您作为特定用户帐户运行服务(或者如果您的服务中的线程模拟特定用户帐户),您也许可以使用 RegOpenCurrentUser 函数检索所需 key 的句柄,然后使用RegistryKey。 FromHandle 从 .Net API 中使用它。
关于c# - 注册表未被 C# 应用程序修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5352901/