c# - 注册表未被 C# 应用程序修改

标签 c# registry

我有以下在 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/

相关文章:

c# - 写入注册表时出现 Visual Studio 部署项目错误

icons - TortoiseGit:覆盖图标适用于文件夹,不适用于文件

c# - EmguCV:无法加载 DLL 'cvextern':找不到指定的过程

c# - 是否有 ObjectContext 中不可用的 DbContext 函数?

c# - 重构大型构造函数

windows - 确定脱机磁盘镜像的 Windows 版本、版本和服务包

c# - 是否有语法进行反向类型推断?

c# - 引发事件时要调用的注册方法的方法

C++ 搜索 Windows 注册表

C++读取注册表