2010-03-23 34 views

Trả lời

7

Trừ khi bạn có lý do chính đáng để sửa đổi sổ đăng ký trực tiếp, tôi khuyên bạn nên xem xét sử dụng WMI. WMI sẽ cung cấp cho bạn một phiên bản thực thi thuyết phục hơn. WMI có thể được truy cập thông qua không gian tên System.Management. Bạn có thể có mã trông giống như thế này.

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

Mã này giả định một tài liệu tham khảo dự án để System.Management.dll và sử dụng tuyên bố sau:

using System.Management; 

Blog Sql Protocolsarticle mà đi vào một số chi tiết như những gì các mã trên đang làm.

Lưu ý: Nếu tường lửa chặn (các) cổng, bạn sẽ vẫn không thể truy cập máy chủ qua TCP.

+0

Chúng tôi đã không sử dụng mã của bạn mặc dù đã sử dụng WMI – Rohit

+0

@Rohit: Vui mừng khi biết điều đó đã giúp ích. – VoidDweller

3

Hãy xem HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp hive. Có các phím như Enabled, ListenOnAllIPs và danh sách các địa chỉ IP để nghe.

Các vấn đề liên quan