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 triển khai bất khả tri phiên bản hơn. WMI có thể được truy cập thông qua System.Management
không gian tên. 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 tham chiếu dự án đến System.Management.dll
và câu lệnh sử dụng sau:
using System.Management;
Giao thức Sql blog có bài viết đi sâu vào một số chi tiết về những gì đoạn mã trên đang làm.
Lưu ý:Nếu tường lửa đang chặn (các) cổng, bạn sẽ vẫn không thể truy cập máy chủ qua TCP.