2016-07-25 13 views
0

私はC#でWindowsフォームアプリケーションを作成し、その上にウィンドウサービスを追加しました。問題は、インストール後にサービスを開始するたびに、私はいつもError 1053 the service did not respond to the start or control requestになります。しかし、新しいプロジェクトを作成してSelect Windows Service and Installed and Runを実行した後、エラーはなく、サービスは正しく開始しています。既存のプロジェクトにWindowsサービスを追加することは可能ですか?

Windowsサービス用の個別プロジェクトを作成する必要がありますか、何か不足していますか?

私のターゲットフレームワークは4.5.2で、私はWindowsサービスの中にUDPとTCP機能を持つ予定です。

+0

「Windowsサービス用の個別プロジェクトを作成する必要がありますか?」*いいえ*。 "それとも私は何かが欠けているのですか?" *はい* –

+0

設定する必要はありますか?あなたは何が欠けていると思いますか?私がWindowsサービスで働くのはこれが初めてです。私は見つけたチュートリアルでWindowsサービスベースを作成することを学びます。私はいつもWindowsサービスでチュートリアルを手に入れますが、Windowsフォームアプリケーションのチュートリアルはありません。 – Polar

+2

私は分かりません。問題を再現するにはどうすればよいですか? –

答えて

0

Main()からServiceBase.Run()を呼び出すことは、アプリケーションを通常のアプリケーションではなくサービスにするものです。 Windowsサービステンプレートを使用してプロジェクトを作成したが、ServiceBase.Run()の呼び出しを取り除いた場合、結果はサービスではなく通常のアプリケーションになります。 (おそらく壊れアプリケーションが、それにもかかわらず、アプリケーション。)

ボンネットの下に、ServiceBase.Run()は、あなたのOnStart()関数を呼び出して内部ServiceBase.ServiceMainCallback()関数を呼び出す、StartServiceCtrlDispatcher()を呼び出します。したがって、Run()を呼び出さなければOnStart()を呼び出すことはなく、サービスは何もしません。

StartServiceCtrlDispatcher()関数は、OnStop()およびその他の関連するすべてのメソッドの呼び出しに間接的に責任を負います。基本的に、それはサービスの核心であり、それがなければ何も動作しません。もちろん、あなたがWindowsと呼ぶのでなければ、Windowsは最終的にコントロールディスパッチャーが起動していないことに気づき、プロセスがハングアップしていると仮定して終了します。それがエラー1053の意味です。

ですが、サービスとアプリケーションの両方を1つの実行可能ファイルに組み込むことは可能ですが、正しく動作させることは自明ではありません。それはまた、よく使われない、珍しいアプローチです。それを避けるべき魅力的な理由がない限り、あなたのサービスに別のプロジェクトを使用することをお勧めします。

+0

だから、私は2つのプロジェクトを作成する必要がありますか? 1つはサービス用、もう1つはWindowsフォーム用です。既存のWindowsフォームアプリケーションに追加するのではなく、別のプロジェクトを作成するWindowsサービスについては本当にお勧めですか? – Polar

+0

Windowsサービスが別のプロジェクトにあり、後で呼びたいメソッドがいくつかある場合は、呼び出すことができますか?いいえ、私は私のサービスを呼び出すいくつかの機能があります。 – Polar

+0

共通機能をライブラリに移動することができます。 –

関連する問題