質問: Windowsアプリを初めて開発するのですが、アプリケーションの構成に悩んでいます。 大きく分けて、以下の機能がある場合に、プロセス(*.exe?)はどのように分散すべきでしょうか。 **最適な案があれば、ご教示頂ければと思います。** また、その際に Visual Studio で選ぶべき適切なテンプレートはどれになると思われますでしょうか。 以下には当方の想定を合わせて記載します。 1. WebAPIを提供するHTTPサーバ 当方の想定は、ASP.NET WebAPIのテンプレートを使用して作成。 2. 定期的にあるサーバから情報を取得するデーモン(Winではサービスという?) 当方の想定は、サービス用のテンプレートを使用したかった。 しかし、Visual Studio 2015では「Windows サービス」というテンプレートはなかった。WCFサービスアプリケーションがそれ? 3. シリアル通信を制御するデーモン 当方の想定は、上記2と同様と考える。シリアル通信が発生した場合に動き出すようなハンドラとして動作させるアプリケーションの作成が可能ならばそうしてもよい。 4. 汎用機能を集めたライブラリ 当方の想定は、上記1, 2, 3のいずれのアプリからも使用されるクラスについては「共有プロジェクト」に集約しようと考えた。 環境 -- * **IDE :** Visual Studio Professional 2015 * **言語 :** C# * **デプロイ環境 :** Windows 10 Professional
回答: Visual Studio 2015で「Windowsサービス」テンプレートを作成する場合、「新しいプロジェクト」ダイアログの言語のルートには表示されませんので「クラシックデスクトップ」ノードに移動する必要があります!画像の説明をここに入力。 また該当テンプレートを使用しなくても「Windowsアプリケーション」プロジェクトに`System.ServiceProcess.dll`の参照を追加し、`System.ServiceProcess.ServiceBase`クラスの派生型を実装して`Program.Main`で`ServiceBase.Run`メソッドを呼び出すことで「Windowsサービス」テンプレートと同等の内容となります。 ``` internal class HogeService : ServiceBase {} class Program { static void Main(string[] args) { ServiceBase.Run(new[] { new HogeService() }); } } ```