在C#中为所有用户设置注册表项

时间:2010-01-18 18:23:59

标签: c# registry

我有一个应用程序在安装过程中更改了一些注册表值。

我正在更改HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings中的ProxyEnable和ProxyServer。

这在.NET安装程序中作为“Just Me”安装时效果很好但是我想为计算机上的所有用户设置这些值(Everyone)。

我的应用程序是一个代理服务器,它将记录它收到的所有URL请求。为此,它需要在Internet设置中设置代理值。我希望这可以作为安装过程的一部分而不是管理员必须为所有用户设置它。

我知道这可以通过组策略完成,但是一些将使用此应用程序的计算机将拥有多个用户而没有组策略(XP Home等)。

有没有办法更改提到的注册表项,以便所有用户的IE都能设置Prxy设置?

我目前使用的代码是:

    private void EnableProxy(string proxy) {
        using(RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true)) {
            registry.SetValue("ProxyEnable", 1);
            registry.SetValue("ProxyServer", proxy);
        }

        settingsReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED,
            IntPtr.Zero, 0);
        refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
    }

    private void DisableProxy() {
        using(RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true)) {
            registry.SetValue("ProxyEnable", 0);
            registry.DeleteValue("ProxyServer", false);
        }

        settingsReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED,
            IntPtr.Zero, 0);
        refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
    }

3 个答案:

答案 0 :(得分:0)

将其添加到HKEY_USERS不够(?)

答案 1 :(得分:0)

答案 2 :(得分:0)

我在http://www.pctools.com/guides/registry/detail/1147/的帮助下找到了答案。

我需要创建ProxySettingsPerUser并将其设置为0,然后为LocalMachine设置ProxyEnable和ProxyServer。