2010-03-23 2 views

Antwort

7

Sofern Sie keinen guten Grund haben, die Registrierung direkt zu ändern, schlage ich vor, dass Sie die Verwendung von WMI in Erwägung ziehen. WMI wird Ihnen eine mehr versionsunabhängige Implementierung bieten. Auf WMI kann über den Namespace System.Management zugegriffen werden. Sie könnten Code haben, der ungefähr so ​​aussieht.

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

Dieser Code setzt voraus, einen Projektverweis auf System.Management.dll und die folgende using-Anweisung:

using System.Management; 

Der Sql Protocols Blog ein article hat, die als zu dem, was der obigen Code in Detail geht tut.

Hinweis: Wenn eine Firewall die Ports blockiert, können Sie weiterhin nicht über TCP auf den Server zugreifen.

+0

Wir haben Ihren Code nicht verwendet, obwohl verwendet WMI – Rohit

+0

@Rohit: Froh zu hören, es half aber. – VoidDweller

3

Werfen Sie einen Blick auf HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp Bienenstock. Es gibt Tasten wie Enabled, ListenOnAllIPs und eine Liste von IP-Adressen zum Abhören.

Verwandte Themen