0

複数のプロジェクトでソリューションを作成しました。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 クラスのインスタンスを作成するだけでソリューション全体を実行できます。インストーラー、サービス、そしておそらく建物さえも作成するだけで、私はうまくいきません。ここで何をすべきかわかりません。

4

1 に答える 1

2

これは便利なチュートリアルですhttp://msdn.microsoft.com/en-us/library/zt39148a(v=vs.100).aspx

UI をサービスに組み込むか、WCF などを使用してサービスと通信する別のアプリを用意することができます。

これは、GUIを使用して既存のexeをWindowsサービスにするのにも役立ちますが、プロジェクトを途中で分割しているためです。

于 2013-04-23T10:21:57.103 に答える