2009-10-12 1 views

答えて

16

There's a good example on how to set up a minimal service on MSDNの一部であるSRVANYツールを使用してサービスとして実行するアプリケーションを設定することができます。 main関数、エントリーポイント、およびサンプルコードの記述については、パートを参照してください。

Windowsサービスを構築して実行すると、次の大きな問題が発見されます。デバッグするのは苦痛です。ターミナルはありません(したがってstdout/stderrもありません)。実行可能ファイルを実行しようとすると実際にサービスを起動してからあなたに戻ります。

非常に便利だとわかったのは、アプリケーションに-foregroundオプションを追加することです。そのフラグを指定して実行すると、サービス開始コードがバイパスされ、代わりに通常のコンソールアプリケーションのように実行されるため、デバッグする。 VS.Netでは、そのフラグを使用して起動するデバッグオプションを設定します。

+1

ここでデバッグするためのヒントがいくつかあります(特に、gflagsを使用してデバッガを自動的に起動する方法)。http:// support .microsoft.com/kb/824344 –

+0

-foregroundをコマンドラインに追加しますか? – Maciek

+0

はい、フラグなしで実行すると、サービスがインストールされて実行されます(サービスが動作する必要があります)。 -foregroundオプションを指定して実行すると、サービスのインストール手順が省略されます。 –

2

最も簡単な解決策は、Visual Studioで新しいWindowsサービスプロジェクトを作成し、コードを新しいプロジェクトにコピーすることです。

UI(この場合はコンソール)をロジックから分割するようにコードをリファクタリングすると、作業を行うライブラリを作成してコンソールプロジェクトとサービスプロジェクトの両方から呼び出すことができます。

+0

作業コード(UI)をライブラリとしてサービスにロードするのではなく、 – Patrick

0

Srvanyでは、同時に1つのサービスしか許可されません。だから、私はsginvany(sFany)を書いて、nginxとphp-cgiを一緒にWindowsサービスとして実行させる。ここではソースがhttps://github.com/stxh/sFany

3

MSDN here

に本当に良い例がありますされてそれは自己/アンインストール機能とログサービスの開始をインストールし、Windowsイベントログにイベントを停止しているボイラープレートC++サービスプロジェクトです。他のサービスと同様に、サービスアプリ(スナップイン)を介して停止および開始することができます。最初に、LocalSystemの権利を与えて、動作していることを確認することができます。少なくとも、LocalServiceの権限でプロジェクトを開始するのに十分な権限がありません。それ以外の点では、ダウンロードした指示にもかかわらず、Visual Studio 2008プロジェクトがそのまま実行されます。

少し遅れていますが、これが他の人に役立つことを願っています。

関連する問題