gpt4 book ai didi

c# - 作为 LocalSystem 运行的 .NET c# 服务更改注册表中的 ProxyServer,但浏览器在(重新)启动之前不会注意到

转载 作者:太空宇宙 更新时间:2023-11-03 15:04:46 24 4
gpt4 key购买 nike

我有一个 .NET c# 服务在 Windows10 64 位上作为 LocalSystem 运行。它的工作是改变位于

下的“ProxyEnable”和“ProxyServer”值
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings

在注册表中。它为系统的所有“人类”用户(即以“S-1-5-21..”开头的 key )这样做。它工作正常,用户启动的所有浏览器都使用此配置(代理或无代理)。

但是,仍在运行的浏览器直到很长时间才会注意到更改(打开或关闭代理设置) - 或者直到我手动打开和关闭 Windows“Internet 选项 > 代理设置”(不做更改)或保存它们)或重新启动浏览器。后两者使系统重新读取设置并将设置传播到所有(其他)打开的浏览器。

现在 DllImport'ing wininet.dll 和使用 InternetSetOption 确实有效

[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(
IntPtr hInternet,
int dwOption,
IntPtr lpBuffer,
int lpdwBufferLength);
private const int INTERNET_OPTION_PROXY_SETTINGS_CHANGED = 95;
private const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
private const int INTERNET_OPTION_REFRESH = 37;
...
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY_SETTINGS_CHANGED, IntPtr.Zero, 0);
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);

但仅当我以登录用户身份执行这段代码时。当服务执行它时,它什么都不做。我猜这是因为作为 LocalSystem,该服务将其应用于错误的范围。

我已经修改了很多东西。尝试启动另一个进程作为用户是没有选择的,因为这需要凭据。还设置了使用 LocalSystem 的服务。

我只是确信,作为在权限方面接近管理员的 LocalSystem,必须有一种方法告诉所有应用程序和浏览器,代理设置已更改。它只是传播,如打开和关闭代理设置-GUI 调用,我需要以某种方式触发。但我不知道如何。你呢?

最佳答案

这就是环境变量和注册表键在 Windows 中的作用方式——据我所知,所有新进程在启动时都会获得所有变量的快照,但仅此而已。它们只会在您重新启动该过程时更新。

参见 C# : How to change windows registry and take effect immediately

关于c# - 作为 LocalSystem 运行的 .NET c# 服务更改注册表中的 ProxyServer,但浏览器在(重新)启动之前不会注意到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44250379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com