2

VS2010 SP1 を使用するときは、Windows サービスを作成します。インストールせずにデバッグしたい。そこで、Program.cs のメイン メソッドに次のようにコードを記述します。

#if (DEBUG)
            ControllerNTService service =new ControllerNTService();
            Console.ReadLine();
#else
            System.ServiceProcess.ServiceBase[] ServicesToRun;
            ServicesToRun = new System.ServiceProcess.ServiceBase[] { new ControllerNTService() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
#endif

VS 2010 で Windows サービスをデバッグすることを期待していましたが、VS では、以下のコード行が灰色で表示されます。グレーコードが無効ということですね。(2 本の線は灰色です)

ControllerNTService service =new ControllerNTService(); Console.ReadLine();

コードが有効であれば、私はそれらに出くわすことができると思います。

別の質問として、上記のコードを使用して F5 キーを押してデバッグすると、デバッグできないことが示されます。最初にサービスをインストールする必要があります。

誰かが私を導くために同様の問題に遭遇したことを願っています。良い1日を

4

1 に答える 1

1

プロジェクトのアクティブなビルド構成を確認する必要があります。「DEBUG」に設定する必要があります。(あなたの記述で「RELEASE」に設定されていると思います)

Menu Build -> ConfigurationManager...-> ダイアログで Active Solution Configuratio を「DEBUG」に設定して、アクティブなビルド構成を変更できます。

コマンドラインからサービスを開始する場合は、サービスも開始する必要があります。したがって、インスタンスで保護された OnStart メソッドを呼び出す Start メソッドを ControllerNTService に追加する必要があります。

public class ControllerNTService{
   // additional service code

   internal void Start(string[] args) {
     base.OnStart(args);
   }

   internal void Stop() {
     base.OnStop();
   }
}

メイン メソッドでは、サービス インスタンスで Start を呼び出す必要があります。

ControllerNTService service =new ControllerNTService();
service.Start(args);
Console.ReadLine();
service.Stop();

開始するだけでなく、サービスを停止するメソッド (procted メソッド OnStop を呼び出す) を提供することもお勧めします。このメソッドは、サービスを停止するために Console.ReadLine の後に呼び出されます。

于 2012-04-25T07:51:48.773 に答える