2011-10-20 7 views

答えて

5

SQL ServerのWindowsサービスの開始モードを自動に変更します。 しかし、これもC#で行うことができますが、私はそれをお勧めしません。アクセスセキュリティなどの他の問題があります。

 System.Diagnostics.Process process = new System.Diagnostics.Process(); 
     process.StartInfo.FileName = "net start \"Sql Server (SQLEXPRESS)\""; 
     process.Start(); 

Sql Server(SQLEXPRESS)は、サービスの名前です。

+2

あなたは(アプリケーションマニフェストでこれを強制する)アプリケーションを昇格させる必要があるだろう、これを実行するために注意してください。 –

+0

複数のPCでアプリケーションを使用したいので、コードでそれを行います。ありがとうございます! – Harald

+1

@Harald:複数のPCで実行している場合、ネットワーク経由でSQL Serverの単一のインスタンスに接続したくないですか?または、データベースがローカルストレージとして機能するアプリケーションを作成していますか?そのような場合は、データベースをファイルベースのデータソースとして扱うほうがよい場合があります。 –

2

コードではしないでください。これが必要/有用であることは非常にまれです。ホイールを改造しないでください。

管理ツールのコンピュータのサービスマネージャを調べます。 SQL Server Expressのインスタンスがそこに表示されます。そこから手動で起動することもできますし、サービスプロパティの設定から自動的に起動するように設定することもできます。 [スタートアップの種類]コンボボックスで[自動]に設定します。

フォローアップ:サーバー/サービスを開始するにはさまざまな方法があります。私がサービス以外の提案に見られる問題は、セキュリティ、構成、および他の管理オーバーヘッドを不必要に導入することです。サービスとして実行されるSQL Serverはよく理解されているパラダイムです。再び、車輪を再構築しないでください。

0

Win7のタスクバーまたはクリックしたデスクトップに保存するバッチスクリプトを使用できます。これは、あなたがC#経由で別のアプリケーションに入ることを避けるためにのみ行うことを前提としています。 C#で書かれたアプリでこれが必要な場合は、おそらくあなたの探している解決策ではありません。

ここを見てhttp://www.bidn.com/blogs/briankmcdonald/bidn-blog/1011/restarting-sql-server-using-a-batch-script

0

はこれを取り組むためにかなりの数の方法があります。全体的に、実行時に他の人のボックスでこれを必要としない限り、私はdknaackが示唆しているように、サービスを自動的に設定します。別の人の箱でも、私はインストーラの中で「サービスをオートマチックに設定する」を設定し、アプリケーションの適切な部分としては設定しません。

SQL ServerのC#コードでサービスを制御するには、Microsoft.SqlServer.Management.Smo.Wmi.Serviceクラスが1つのオプションです。より一般的なオプションとして、System.ServiceProcess.ServiceControllerがあります。 SQLオブジェクトにWMIが表示されますか?それは良い指標のスクリプトが別のまともな選択肢である(そしておそらく多くの再利用可能な?)

5
ここ

C#でSMOでそれを行う方法は次のとおりです。

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
using Microsoft.SqlServer.Management.Smo; 
using Microsoft.SqlServer.Management.Smo.Wmi; 
using Microsoft.SqlServer.Management.Common; 

static class SQLStart 
{ 
    public static void StartSQLService() 
    { 
     //Declare and create an instance of the ManagedComputer object that represents the WMI Provider services. 
     ManagedComputer mc = default(ManagedComputer); 
     mc = new ManagedComputer(); 

     //Iterate through each service registered with the WMI Provider. 
     Service svc = default(Service); 
     foreach (svc in mc.Services) { 
      Console.WriteLine(svc.Name); 
     } 

     //Reference the Microsoft SQL Server service. 
     svc = mc.Services("MSSQLSERVER"); 

     //Stop the service if it is running and report on the status continuously until it has stopped. 
     if (svc.ServiceState == ServiceState.Running) { 
      svc.Stop(); 

      Console.WriteLine(string.Format("{0} service state is {1}", svc.Name, svc.ServiceState)); 
      while (!(string.Format("{0}", svc.ServiceState) == "Stopped")) { 
       Console.WriteLine(string.Format("{0}", svc.ServiceState)); 
       svc.Refresh(); 
      } 
      Console.WriteLine(string.Format("{0} service state is {1}", svc.Name, svc.ServiceState)); 
      //Start the service and report on the status continuously until it has started. 
      svc.Start(); 
      while (!(string.Format("{0}", svc.ServiceState) == "Running")) { 
       Console.WriteLine(string.Format("{0}", svc.ServiceState)); 
       svc.Refresh(); 
      } 
      Console.WriteLine(string.Format("{0} service state is {1}", svc.Name, svc.ServiceState)); 

     } else { 
      Console.WriteLine("SQL Server service is not running."); 
     } 
    } 
} 

をこれはMSのVB.netの例の単なる変換であります。 http://msdn.microsoft.com/en-us/library/ms162139(v=sql.90).aspx

関連する問題