複数のプロジェクトでソリューションを作成しました。WPF アプリケーションであるプロジェクトが 1 つあります。このアプリケーションは、サービス ロジック アプリケーションと通信します。そのアプリケーションは、すべてのトラフィックを特定のオブジェクトの異なるマネージャーにリダイレクトします。これらのマネージャーは、いくつかのクラスを介してデータベースと通信します。ソリューションの他のプロジェクトは、たとえば、接続したハードウェアと通信できるプロジェクトです。
このソリューション (WPF アプリケーションを除く) を Windows サービスに変換するにはどうすればよいですか? これにより、ハードウェア通信やデータベースの保存などのすべてが引き続き実行され、いつでも WPF UI を開始していくつかの設定を構成できます。
インストーラーのパッケージ化がどのように機能するのかよくわかりません。セントラル ロジック クラスのインスタンスを作成するサービスを作成しました。このインスタンスは 1 回だけ作成する必要があります。このクラスをインスタンス化すると、データベース ハンドラ クラスと外部ハードウェアからのイベントを処理するクラスだけでなく、他のマネージャ クラスも確実に開始されます。つまり、アプリケーションは中央ロジック クラスをインスタンス化するときに機能するはずです。そのため、サービスを開始するときに実際に行う必要があるのは、そのクラスのインスタンス化です。WPF UI アプリケーションは構成にのみ使用され、必ずしも必要ではありません。
このようなサービスを作成してインストーラーを作成するにはどうすればよいですか? 次のコードでは不十分なようです。
protected override void OnStart(string[] args)
{
log.Debug("Starting service...");
serviceLogic = new CentralLogic();
log.Debug("Successfully started service");
}
または、インストーラーを間違って作成しています。誰かが私を正しい方向に導くことができますか?
EDIT:私はそれを調べましたが、後でUIがサービスと通信できるようにするためにWCFを使用するようです。まず、サービスを Windows PC にインストールして、正しく動作させたいと思います。Visual Studio でソリューションを実行すると、すべてが想定どおりに機能します。WPF アプリケーションは、CentralLogic クラスのインスタンスを開始および作成するアプリケーションです。その後はUIを何もせず、ハードウェアで「遊ぶ」だけでも、すべて機能します。したがって、このクラスは他のクラスを管理するため、CentralLogic クラスのインスタンスを作成するだけでソリューション全体を実行できます。インストーラー、サービス、そしておそらく建物さえも作成するだけで、私はうまくいきません。ここで何をすべきかわかりません。