2010-03-23 6 views

Respuesta

7

A menos que tenga un buen motivo para modificar el registro directamente, le sugiero que considere usar WMI. WMI le proporcionará una implementación más independiente de la versión. Se puede acceder a WMI a través del espacio de nombre System.Management. Podrías tener un código que se parece a esto.

public void EnableSqlServerTcp(string serverName, string instanceName) 
{ 
    ManagementScope scope = 
      new ManagementScope(@"\\" + serverName + 
           @"\root\Microsoft\SqlServer\ComputerManagement"); 
    ManagementClass sqlService = 
      new ManagementClass(scope, 
           new ManagementPath("SqlService"), null); 
    ManagementClass serverProtocol = 
      new ManagementClass(scope, 
           new ManagementPath("ServerNetworkProtocol"), null); 

    sqlService.Get(); 
    serverProtocol.Get(); 

    foreach (ManagementObject prot in serverProtocol.GetInstances()) 
    { 
     prot.Get(); 
     if ((string)prot.GetPropertyValue("ProtocolName") == "Tcp" && 
      (string)prot.GetPropertyValue("InstanceName") == instanceName) 
     { 
      prot.InvokeMethod("SetEnable", null); 
     } 
    } 

    uint sqlServerService = 1; 
    uint sqlServiceStopped = 1; 
    foreach (ManagementObject instance in sqlService.GetInstances()) 
    { 
     if ((uint)instance.GetPropertyValue("SqlServiceType") == sqlServerService && 
      (string)instance.GetPropertyValue("ServiceName") == instanceName) 
     { 
      instance.Get(); 
      if ((uint)instance.GetPropertyValue("State") != sqlServiceStopped) 
      { 
       instance.InvokeMethod("StopService", null); 
      } 
      instance.InvokeMethod("StartService", null); 
     } 
    } 
} 

Este código supone una referencia de proyecto a System.Management.dll y la siguiente instrucción using:

using System.Management; 

El blog tiene un Sql Protocolsarticle que entra en algunos detalles sobre lo que el código está haciendo.

Nota: Si un servidor de seguridad bloquea los puertos, aún no podrá acceder al servidor a través de TCP.

+0

No usamos el código aunque utilizamos WMI – Rohit

+0

@Rohit: Me alegro de haberlo ayudado. – VoidDweller

3

Eche un vistazo a HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp colmena. Hay claves como Enabled, ListenOnAllIPs y una lista de direcciones IP para escuchar.

Cuestiones relacionadas