2011-02-03 7 views
1

I가 여기에 코드 조각 다음 자동으로 프록시 설정 변경 구축을 위해 노력하는 메신저 : 수정 프록시 설정

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"); 

내 응용 프로그램은 윈도우 서비스를하고 로컬 시스템 계정의 권한으로 실행되고있는 모든 권한을가집니다.

답변

1

나는 코드 Registry.CurrentUser을 사용하고 있으며 Local System Account에서 실행 중임을 알 수 있습니다.

두 가지 스 니펫을 조합하여 잘못된 사용자 계정의 설정을 변경했다고 생각합니까? 귀하의 계정에서 서비스를 실행하고 이것이 어떤 차이가 있는지 확인하는 것이 좋습니다 (UAC 등으로 인해 가능하다고 가정).

+0

@ 로버트 : '일반 사용자'로 자신의 계정을 의미합니까? 그리고 설정이 변경되었는지 어떻게 확인하고 있습니까? –

+0

여러 계정에서 서비스를 실행 한 다음 이더넷 케이블을 분리하고 이벤트 뷰어에서 프록시가 변경되었다는 메시지가 나타날 때까지 기다린 다음 레지스트리와 IE 프록시 설정을 직접 확인하고 변경 사항을 확인하지 마십시오. – RobertPitt

+0

@ 로버트 : 문제는 'CurrentUser'에 대한 레지스트리 설정을 바꾸고 있기 때문에, 그 일을하는 프로세스가 당신처럼 로그온되어 있지 않다면, 당신이 레지스트리의 잘못된 설정을 바꾸고있는 것 같아요. 컴퓨터의 모든 사용자에 대해 별도의 'CurrentUser'가 있음을 기억하십시오. 나는 이것이 당신의 문제인지 완전히 확신 할 수는 없으므로 그것이 다른 것이 될 수 없다는 말은 아닙니다. –

0

나는 네트워크 어댑터를 비활성화하고 프록시를 변경하는 유사한 프로그램을 작성했습니다. 그것은 tognet.codeplex.com입니다. 내가 경험 한 // 업데이트 코드를 강제로 Windows 7 상자에서 프록시 설정을 새로 고치지 않아도됩니다. IE를 다시 시작하고 프록시 설정을 다시 보면 프록시의 정확한 상태를 보여줍니다.

+0

당신의 코드를 보면서'InternetSetOption'을 사용하지 마십시오.이 호출은 그 호출 내에서 캐시와 업데이트를 플러시하여 호출이 끝날 때 설정이 유효하도록해야합니다. – RobertPitt

+0

예. 을 호출해야합니다.'code'InternetSetOption (NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0); InternetSetOption (NULL, INTERNET_OPTION_REFRESH, NULL, 0);'code' – AbrahamJP

+0

'IntPtr.Zero'를'null'로 변경하면 에러가납니다. – RobertPitt