今回の記事はC#とVisualStudioでWindowsServiceを作成する方法に関しての記事です。そもそもWindowsServiceって?という方でもわかるように初心者に優しい記事になっておりますので是非参考にしてください。
では早速記事に進みます。
C#とWindowsサービス作成環境構築
まずはC#とWindowsサービスを作成する環境構築を行っていきます。VisualStudioのインストールをまず行う必要があるのですが、内容自体は非常に簡単です。公式ページからVisual Studioのインストールしてプロジェクトを新規作成まで行いましょう。
C#でWindowsサービスを作成する
まずはプロジェクト選択の際に「Windowsサービス(C#)」を選択し名前は「WindowsServiceTest」にします。
「Windows デスクトップ」のカテゴリにある、Windows サービスを選択します。
名前を適宜入力して、OKボタンをクリックします。
ソリューション、プロジェクトが新規作成され、以下のような表示になります。
Service1.csがデザイナーで開かれている状態です。
(必須ではないですが)Service1.csの名前を変えてみたいと思います。
⇒そのまま使うことはあまりないでしょうから・・・
ソリューションエクスプローラ上で、Service1.csを選択し、右クリックメニューを表示します。
そこから「名前の変更」をクリックし、適宜名前を入力してください。
ここでは、ServiceTest.csに名前を変更しています。
以下のようなメッセージが表示されるので、「はい」を選択します。
⇒クラス名などもすべて自動で変更されます。
ここからは、インストーラーコンポーネントを追加します。
ServiceTest.csをデザイナーで開いていない状態の場合は、
ソリューションエクスプローラでServiceTest.csをダブルクリックしてください。
デザイナー上で、右クリックメニューを表示し、「インストーラーの追加」を選択します。
そうするとプロジェクトにProjectInstaller.csが追加されます。
コンポーネントとして、ServiceProcessInstallerとServiceInstallerが追加されています。
続いて、コンポーネントのプロパティを編集していきます。
これらは、どのようなサービスとしてインストールするかを設定するものです。
まずはServiceProcessInstallerから。
デザイナー上で「serviceProcessInstaller1」を選択して、右側のプロパティタブをクリックします。
ここでは、Accountを設定します。
プロパティタブ内のAccountの右側をクリックし、
サービスをどのアカウントで実行するかを選びます。
(こちらも必須ではないですが)名前を変えます。
プロパティタブ内の(Name)の右側を適宜変更します。
ここでは、serviceProcessInstaller1をserviceProcessInstallerにします(1を削除)。
次にServiceInstallerのプロパティを変更します。
デザイナー上で「serviceInstaller1」を選択して、右側のプロパティタブをクリックします。
主に変更するのは以下のプロパティ
・DelayedAutoStart:他の自動的に開始されるサービスが実行されるまで、サービスの開始を遅延するかどうか
・Description:サービスの説明
・DisplayName:サービス管理ツール等での表示用の名前
・ServiceName:サービス識別名
・StartType:サービスの開始タイミングを指定
StartTypeのプルダウンについては、詳細は以下のページを参照してください。
https://docs.microsoft.com/ja-jp/dotnet/api/system.serviceprocess.servicestartmode?view=netframework-4.8
AutomaticかManualを選択することになると思います(BootとSystemはドライバ用)。
(そしてこちらも必須ではないですがw)名前を変えます。
プロパティタブ内の(Name)の右側を適宜変更します。
ここでは、serviceInstaller1をserviceInstallerにします(1を削除)。
ではこれでbuildしましょう。
ビルドメニューの「ソリューションのビルド」を選択し、実行ファイル(Exe)を生成します。
これでWindowsサービスができたのでこれを自身端末にインストールしてWindowsサービスに登録してみましょう。
Windowsサービスをインストール
インストール作業は「installutil.exe」というもので実行できます。こちら私のPCでは環境pathが通っていなかったため、直接「installutil.exe」が保存されているディレクトリで操作を行いました。
また、こちらからはコマンドプロンプト、Terminalでの操作になるので下記操作で管理者権限を持た上で捜査を行ってください。
ディレクトリは「C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe」です。その為下記で実行可能です。
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
installutil.exe [作成した上記のservice.exeの絶対path(configはいらない)]
こちら下記のようなエラーに何度も苦しめられました。エラー回避法はIDにコンピューター名を付ける必要があることです。
System.ComponentModel.Win32Exception: アカウント名が無効であるか、または存在しま
せん。あるいは、指定したアカウント名のパスワードが無効です。
コンピュータ名の確認方法はWindowsの検索で「設定」→「システム」→「詳細情報」→デバイス名を確認でわかります。「DESKTOP-○○○○」みたいな感じに私のはなってました。これといつものWindowsPCにログインするIDを組み合わせたものがIDになります。
ID:「DESKTOP-○○○○¥[User名]」
PS:[PCにログインするときに使用しているもの]
これでおそらくすべてうまく完了と出てくるのでWindowsの検索で「サービス」を検索すると現在稼働しているサービス一覧が表示されます。
こちらに反映されていればあとはサービスの起動のみです。作成したサービスは最後には全て削除しておくことをお勧めしまうす。
今回の記事は以上です。他にもC#の記事を多数記載しているので気になる方は是非参考にしてください。
コメント
[…] 「【C#】C#でWindowsサービスを作成する方法」 […]
[…] 「【C#】C#を使ってVisual StudioでWindowsサービスを作成する方法」 […]