我有以下在 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——它只是使用用户帐户进行身份验证,而不是使用 HKEY_CURRENT_USER。个人资料。
这是许多支持 COM 自动化的应用程序无法被服务使用的几个原因之一。
不过,您将能够访问 HKEY_LOCAL_MACHINE。
Edit如果您作为特定用户帐户运行服务(或者如果您的服务中的线程模拟特定用户帐户),您也许可以使用 RegOpenCurrentUser 函数检索所需密钥的句柄,然后使用RegistryKey。 FromHandle 从 .Net API 中使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)