2009-02-27 7 views

答えて

164

明らかにC/C++/Javaのバックグラウンドがある場合、C#はあなたに最も低いエントリポイントを提供すると思います。

  1. オープンのVisual Studio 2008のを、そしてファイルを選択|新規|プロジェクト]メニューオプションを:

    あなたは、Visual Studio 2008を使用していると仮定すると、次の手順を実行することができます。

  2. [新しいプロジェクト]ダイアログで...プロジェクトの種類で、Windowsノード
  3. 、この時点で、[OK]を押し
  4. プロジェクトのためにあなたを名前と場所を入力してWindowsサービステンプレート
  5. を選択|
    • Visual C#を選択しますあなたのWindowsサービスのためのすべての基本を持っています。 Program.csファイルにはサービスのMain()メソッドが含まれ、Service1.csには新しいWindowsサービスであるSystem.ServiceProcess.ServiceBaseコンポーネントが定義されています。防ぐためにfalseに設定 - 例えば、ServiceExample
    • AutoLogのは、あなたのオブジェクト直感的な名前を与える -
      • (名):あなたのSERVICE1コンポーネントのプロパティグリッドの
      • は、最低でも次のプロパティを設定することを検討しますイベントはデフォルトでアプリケーションイベントログに書き込まれません(注:サービスイベントをログに記録すべきではないというわけではなく、アプリケーションログの代わりに自分のイベントログに書き込むことをお勧めします - 下記参照)
      • CanShutdown - システムシャットダウンを処理する場合は、trueに設定してください。
      • ServiceNameが - あなたのサービスは、サービスコントロールマネージャ(SCM)にServiceExampleためのコード、OnStartメソッド(で
    • を知られているであろう)とOnStop()仮想関数をスタブアウトされる名前を定義します。あなたは、あなたのサービスが明らかに必要とするものであれば、これらを記入する必要があります。 CanShutdownプロパティをtrueに変更した場合は、OnShutdownメソッドもオーバーライドする必要があります。私は、これらの関数の使用法を示す以下の例を作成しました。
    • この時点で、ServiceExampleサービスは本質的に完了していますが、まだインストールする方法が必要です。これを行うには、デザイナでServiceExampleコンポーネントを開きます。デザイナーパネルの任意の場所を右クリックし、[インストーラーの追加]メニューオプションを選択します。これにより、ProjectInstallerコンポーネントがプロジェクトに追加されます。このコンポーネントには、serviceProcessInstaller1とserviceInstaller1の2つの追加コンポーネントが含まれています。
    • デザイナーでserviceProcessInstaller1コンポーネントを選択します。プロパティグリッドでは、次のプロパティを設定することを検討:
      • (名) - 、あなたのオブジェクト例えば、serviceProcessInstaller
      • アカウントを直感的な名前を与える - 最小としてLocalServiceのアカウントを選択し、しかし、あなたが使用する必要がありますサービスにさらに特権が必要な場合はNetworkServiceまたはLocalSystemアカウント
    • デザイナーでserviceInstaller1コンポーネントを選択します。プロパティグリッドで、次のプロパティを設定することを検討してください。
      • (名前) - オブジェクトに直感的な名前を付けます。、のServiceInstaller
      • 説明 - あなたのサービス
      • のDisplayNameのためのSCMに表示されます、サービスの説明 -
      • ServiceNameはあなたのサービスのためのSCMに表示されますあなたのサービスのためのフレンドリ名は - これがあることを確認してくださいあなたは、サービスが自動的に起動するか、手動で
    • 私はへの書き込みイベントを好むと述べたことを覚えておきたい場合を示している - あなたはServiceExampleコンポーネントのServiceNameプロパティ用に選択したのと同じ名前が
    • StartType(ステップ4を参照してください)私自身のイベントログではなくアプリケーションイベントログこれを行うには、ProjectInstallerのデフォルトのEventLogInstallerをカスタムのEventLogInstallerに置き換える必要があります。あなたのProjectInstallerのためのコードは次のようになります。この時点で

using System.Diagnostics; 
[RunInstaller(true)] 
public partial class ProjectInstaller : Installer 
{ 
    public ProjectInstaller() 
    { 
     InitializeComponent(); 

     EventLogInstaller installer = FindInstaller(this.Installers); 
     if (installer != null) 
     { 
      installer.Log = "ServiceExample"; // enter your event log name here 
     } 
    } 

    private EventLogInstaller FindInstaller(InstallerCollection installers) 
    { 
     foreach (Installer installer in installers) 
     { 
      if (installer is EventLogInstaller) 
      { 
       return (EventLogInstaller)installer; 
      } 

      EventLogInstaller eventLogInstaller = FindInstaller(installer.Installers); 
      if (eventLogInstaller != null) 
      { 
       return eventLogInstaller; 
      } 
     } 
     return null; 
    } 
} 

、あなたのWindowsサービスの実行可能ファイルを取得するためのプロジェクトをビルドすることができます。サービスをインストールするには、Visual Studio 2008コマンドプロンプトを開き、実行可能ファイルがあるDebugまたはReleaseディレクトリに移動します。コマンドプロンプトで次のように入力します。InstallUtil ServiceExample.exe。これにより、サービスがローカルマシンにインストールされます。アンインストールするには、コマンドプロンプトで次のように入力します。InstallUtil/u ServiceExample.exe

サービスが実行されていない限り、サービスを変更して再構築することができます。サービスをアンインストールして変更する必要があります。ただし、実行中であれば、修正プログラムや拡張機能で実行可能ファイルを上書きすることはできません。

は、アクションにあなたのサービスを見るServiceExample.csファイルを開き、以下の変更を行います:

using System.Diagnostics; 
public partial class ServiceExample : ServiceBase 
{ 
    public ServiceExample() 
    { 
     // Uncomment this line to debug the service. 
     //Debugger.Break(); 

     InitializeComponent(); 

     // Ties the EventLog member of the ServiceBase base class to the 
     // ServiceExample event log created when the service was installed. 
     EventLog.Log = "ServiceExample"; 
    } 

    protected override void OnStart(string[] args) 
    { 
     EventLog.WriteEntry("The service was started successfully.", EventLogEntryType.Information); 
    } 

    protected override void OnStop() 
    { 
     EventLog.WriteEntry("The service was stopped successfully.", EventLogEntryType.Information); 
    } 

    protected override void OnShutdown() 
    { 
     EventLog.WriteEntry("The service was shutdown successfully", EventLogEntryType.Information); 
    } 
} 

あなたはこれらの変更を使用してサービスを実行したら、イベントでServiceExampleイベントログを見ることができますビューアを開き、そこに記録されたメッセージを参照してください。

これが役に立ちます。

EDIT:アプリケーションイベントログをカスタムログではなくイベントログに使用する場合は、ProjectInstaller.csファイルを変更しないでください。さらに、EventLogのLogプロパティをServiceExampleコンストラクタに設定する行を省略します。サービスを実行すると、ログメッセージがアプリケーションイベントログに表示されます。

+5

InstallUtil.exeを使用する代わりに、コマンドラインからサービスをインストールするには、ここの私の投稿を参照してください:http://stackoverflow.com/questions/1195478/how-to-make-a-net-windows -service-start-the-installation-after-the-installation/1195621#1195621 –

+14

+1非常に有効な回答です。 –

+0

クラス/インターフェイスをサービスからエクスポートしてクライアント(ローカルシステムサービス)から呼び出すにはどうすればよいですか? – sarat

0

Visual StudioとC#が最も簡単でした。

Visual Studioは、フレームワークのために必要なサービス配管の設定のすべてを行なったし、私は、あなたが最もを見つけることができますビジュアルC#でVB6、VB.NETとC

0

から移行し、学ぶためにC#は非常に簡単に見つけネット上のコードサンプル。 Visual Studioと組み合わせると、基本的なWindowsサービスを起動して実行するための公園内を歩いています。 Visual Studioでは、MSIインストーラパッケージを簡単に作成できます。

0

C#またはVB.NETを使用して、Visual Studioのサービスタイプのプロジェクトを使用することを選ぶことになります。

私は個人的にはC#が好きですが、一般的にライフサイクルを理解し、ロジックを目的の段階でコーディングするのは簡単です。

インストーラのビルドも非常に簡単です。

0

C#のWindowsサービスプロジェクトは、ボタンをクリックするだけでVisual Studioテンプレートから完全に展開可能なサービスを提供します。ペイロードコードを追加するだけです。

4

私は.NET Frameworkで作業している限り、実際の言語にあまり集中しないと言いますが、あなたには初心者のプロジェクトがあります行くのがいいよ。私は過去にいくつかの "Windowsサービス"を行い、VB.NETとC#の両方で最小限のコードでそれらを開発しました。

OPには、インストーラパッケージをビルドする方法を習得することをお勧めします。サービスをインストールするのは "installutil.exe {drive}¥path¥to¥file.exe"と同じくらい簡単ですが、 "hello world" Windowsサービスを展開するよりも何もする必要がある場合は、意味のある方法でサービスを展開します。

炎の戦争は始まらないが、古い学校のCOM相互運用型のものを除いて、すべての展開パッケージに対してWiXを「標準化」しました。これは正しくインストールするための作業です。私は、WiXチームが、前提条件とメインmsiをダウンロードできるEXEファイルに入れることを可能にするブートストラップ部分を開発することを心配しています。彼らは3.5に向けて予定されているので、私は辛抱強く待って、WinZip自己解凍型実行ファイルを今のところ使います。

+1

うわー!これは古い投稿です。私はHeat.exeの使い方を学び、WiXを使って相互運用可能なlibsを使うのに必要なビットを抽出しました。 –

関連する問題