2011-02-03 94 views
1

,我有以下這裏的代碼片段,即時通訊試圖建立自動更改代理服務器設置:修改代理設置

public class ProxyManager 
{ 
    public static bool UnsetProxy() 
    { 
     return SetProxy(null); 
    } 

    public static bool SetProxy(string Ip,int Port) 
    { 
     return SetProxy(Ip + ":" + Port.ToString()); 
    } 

    public static bool SetProxy(string ProxyAddress) 
    { 
     RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); 
     if (ProxyAddress == null) 
     { 
      registry.SetValue("ProxyEnable", 0); 
     } 
     else 
     { 
      registry.SetValue("ProxyEnable", 1); 
      registry.SetValue("ProxyServer", ProxyAddress.ToString()); 
     } 

     //Force the update! 
     registry.Clase(); 
     InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0); 
     InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); 
     return true; 
    } 

    [DllImport("wininet.dll")] 
    public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength); 
    public const int INTERNET_OPTION_SETTINGS_CHANGED = 39; 
    public const int INTERNET_OPTION_REFRESH = 37; 
} 

但由於某些原因的代理服務器設置沒有被設置的,我知道方法正在被正確執行,因爲我在調用該方法後將事件插入到事件管理器中,並且該方法是可見的。

出於某種原因,儘管代理設置都沒有,I'me調用像這樣的功能:

EventManager.WriteEntry("Proxy Settings Enabled"); 
ProxyManager.SetProxy("10.222.62.65:8080"); 

我的應用程序是一個Windows服務和本地系統賬戶的授權下所運行的擁有完整的權限。

回答

1

我懷疑它可能是您使用代碼Registry.CurrentUser並且它在Local System Account下運行的事實的組合。

您的問題的這兩個片段的組合使我認爲你可能會更改錯誤的用戶帳戶的設置?我建議嘗試在您的帳戶下運行該服務,看看是否有任何區別(假設這可能是由於UAC等原因)。

+0

@羅伯特:有了'標準用戶',你的意思是你自己的賬戶?你如何檢查設置是否被改變? – 2011-02-03 13:11:28

+0

在多個帳戶下運行服務後,斷開以太網電纜,等到我在事件查看器中看到消息,說明代理已更改,然後直接檢查註冊表和IE代理設置,並查看沒有更改。 – RobertPitt 2011-02-07 15:51:46

0

我寫了一個類似的程序來禁用網絡適配器和更改代理。它位於tognet.codeplex.com。我遇到過//強制更新代碼不知道如何刷新Windows 7盒子上的代理設置。如果我重新啓動IE並再次查看代理設置,那麼它將顯示代理的正確狀態。