ロケッこがゆくロケッこがゆく旅行先の状況や趣味、ホームページの更新状況などをブログってます。読んでもらえれば分かるとおり、サービスのデバッグはやたら面倒である。簡単にできる方法はないのか?と考えてみた。サービスは簡単に言えば、バックグラウンドで動く定常的な処理を行うプログラムということらしい。(駐在型プログラムともいうらしい)定常的といえば、昔、C言語とかで簡単なソースを書いて、Dos窓で定期的に処理するプログラム(コンソールプログラム)を作ったことを思い出す。自動起動しないので、スタートアップかタスクに入れておかないといけないこと、うっかり×を押してしまったら処理が停止してしまうくらいなものだろうか。サービスとコンソールにそれほど大きな違いがなければ、コンソールで一度デバッグ用のソースを書き、おおよそプログラムが完成してきたら、サービスへ移行していくというほうがより開発が簡単にいくかもしれない。いうのがこの記事のお題では、サービスとコンソールでは何がどう違うのか?というのをざっくりと見てみると次の点に違いがあることが分かる。当たり前だが、アプリケーションの種類はコンソールかサービスのどちらかが指定されている。スタートアップオブジェクトはコンソールはメインのモジュール、サービスはメインのクラスが選択されている。2.参照の違いサービスの方はServiseProcessというクラスが参照されているくらいで、その他は全く同じである。Mainで起動するか、OnStartで起動するかというくらいの違いであまり変わりないように見える上の3点の違いで、サービスかコンソールかのどちらかに化けるようである。話は簡単、まず、サービスプログラムを作成し、そのソースやプロパティの内容をいじくりまくって、なんとなくコンソールっぽいプログラムを作るという手順で行けるかもしれない。前に、以下に書く手順はサービスプロジェクト→コンソールにする方法である。初心者には途方もなく面倒くさい手続き(※)となるので、サービス→コンソールの順でやっていく方がよい(と感じた)。※面倒くさい理由として、Serviceには隠しファイルで、デザイナファイル(XXX.Designer.vb)が存在するからだ。ユーザーがいじる必要のない部分で隠されているためである。コンソール→サービスで作った場合は、この継承部分をソースのどこかに書いておけばよい。●ソースを編集するまずクラスの中身を下図の上のようにコメントアウトしてしまう。すればモジュールに化ける。丸ごとコメントアウトしておくこの状態でプログラムをコンソールとして構築していく。一瞬でサービスへ戻る。最終的なデバッグを行えば良い。デバッグ方法は以前説明したとおりである。●プロパティの編集する続いて、アプリケーションのプロパティを編集する。アプリケーションの種類をコンソールに切り替え、スタートアップオブジェクトを起動モジュールに変更すれば終わりである。サービスに戻すなら、その逆をすれば良い。WindowsService1.Service1.Main()という警告メッセージが出る。Main()が既にあるからである。ここはModule1を選択しておく方がよい。最終的にサービスプログラムへソースをコピペでちょちょっと編集というのでも良いと思う。その方が、プロパティをいちいちいじったりせずに編集ができるし、楽だと思う(上のコメントアウトの変更は必要だが)。こんな感じでコンソールからサービス開発をアプローチするのはいかがでしょうか追記1ふとこれも使えるのでは?と試してみたところ、使えたので、追記いわゆるコンパイル定数のカスタム定義というもの。一発で切り替えができて便利である。これでも面倒、オプションを元に戻したか、Releaseだったか、サービスプログラムに切り替えたか忘れてしまうという方へ後に書いたクラスやモジュールを共有したいと選択したプロジェクトをデバッグしたいという投稿を応用する手がある。詳しいことは読んでもらって、手順をちょっと端折るが書いてみるとまずサービスを作って、そのソースをコピーするコピーするのは、VBならvbprojが入っているフォルダコピーしたら、ソリューションを開いて既存のプロジェクト名を変更する。(プロジェクト名を変更しないと既存の追加ができない)アセンブリ名は変更しなくても良い(区別するために変更するというのでもよい)アプリケーションの種類とスタートアップオブジェクトをコンソールに変更する(上記参照)。不要なので、コメントアウトしておく。Ifさて、サービス本体をソリューションに追加していく。メニューから既存のプロジェクトを追加する。リンクとして追加する(ここがミソ)他にも重複していたソースをリンクとして追加する。選択した項目が編集(デバッグなど)対象となるように、ソリューションのプロパティから「現在の選択」を選んでおく。片方がコンソールのプロジェクト(コンパイルオプション付き)で、もう片方がリリース用のサービスプロジェクトとなる。あとは、コンソールでデバッグをかけて、問題なければ、サービスでビルドしてリリースである。応用して、サービス開発を楽にしてみてください。Mainを見つけられないといったエラーが出る場合がある。Mainが、xxxに見つかりませんでした。取材や雑誌等で掲載される場合は、事前にお知らせください。