जब तक आपके पास सीधे रजिस्ट्री को संशोधित करने का कोई अच्छा कारण न हो, मेरा सुझाव है कि आप WMI
. का उपयोग करने पर विचार करें . WMI आपको अधिक संस्करण अज्ञेयवादी कार्यान्वयन प्रदान करेगा। WMI को System.Management
के माध्यम से एक्सेस किया जा सकता है नाम स्थान आपके पास ऐसा कोड हो सकता है जो कुछ इस तरह दिखता हो।
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);
}
}
}
यह कोड System.Management.dll
. के लिए एक प्रोजेक्ट संदर्भ मानता है और निम्नलिखित कथन का उपयोग करते हुए:
using System.Management;
Sql प्रोटोकॉल ब्लॉग में एक लेख है यह कुछ विस्तार से बताता है कि उपरोक्त कोड क्या कर रहा है।
नोट:यदि कोई फ़ायरवॉल पोर्ट को अवरुद्ध कर रहा है, तब भी आप टीसीपी के माध्यम से सर्वर तक पहुँचने में असमर्थ होंगे।