レジストリを直接変更する正当な理由がない限り、WMI
の使用を検討することをお勧めします。 . WMI は、よりバージョンにとらわれない実装を提供します。 System.Management
から WMI にアクセスできます。 名前空間。次のようなコードを作成できます。
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 (serverProtocol.GetInstances() の ManagementObject prot) { prot.Get(); if ((string)prot.GetPropertyValue("ProtocolName") =="Tcp" &&(string)prot.GetPropertyValue("InstanceName") ==instanceName) { prot.InvokeMethod("SetEnable", null); } } uint sqlServerService =1; uint sqlServiceStopped =1; foreach (sqlService.GetInstances() の ManagementObject インスタンス) { 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 プロトコル
ブログには 記事
があります 上記のコードが何を行っているかについて詳しく説明します。
注:ファイアウォールがポートをブロックしている場合でも、TCP 経由でサーバーにアクセスすることはできません。