15
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Powershellでサービスを作れるようにしてみた

Posted at

Powershellでサービスを作れるようにしてみました。

何に使うか・どのように使うか

WindowsにはLinuxのデーモンスクリプトに相当する仕組みがないため、
LinuxのOSSをWindowsに移植して、無事ビルドが出来ても、サービスの実装がなく、
プロセスを直起動させて無理やり常駐させている事例が多々あります。

PowerPuppetを使うとこのようなOSSソフトにも自動起動の機能等をPowershellというインタプリタのシェル言語をつかって柔軟に付け加えることができます。

Powershellはシェル言語なため、プロセスのロギング、ファイルの後始末、子プロセスも含めたプロセス監視等インフラ観点のロジックをC#よりも簡易的に記述できます。

GitHubのReadmeにFileSystemWatcherと組み合わせる使い方を想定していると書きましたが、
このFileSystemWatcherも結構癖があるみたいで、挙動を見て細かいロジック修正が必要、
そうなるとインタプリタでシェルというPowershellと相性がいいと思い、想定使用例に挙げました。

導入手順

  1. PowerPuppetをgit cloneでとってきます

git clone https://github.com/stofu1234/PowerPuppet

  1. プロジェクトをビルドし、PowerPuppet.exeを作成します

MSBuild.exe /property:Configuration=Release PowerPuppet.csproj

(MSBuild.exeは\Microsoft.NET\Framework[|64]\v*..****にあります)

2.PowerPuppet.exeを任意の名前にリネームします

例) PowerPuppet.exe → nginx_service.exe

3.同名の.ps1ファイルを用意します

例) nginx_service.ps1

4.InstallUtil.exeでリネームしたexeを登録します

例) InstallUtil.exe nginx_service.exe

(InstallUtil.exeは\Microsoft.NET\Framework[|64]\v*..****にあります)

gituhub上のsamplecfgフォルダに以下のサンプルps1があります

nginx_service.ps1 → Nginx用サンプルps1
node_service.ps1 → Node.js用サンプルps1

サンプルps1を参考に、各種アプリ用のps1を作ってください。

5.サービスが登録されました。
service.png

自動起動(start・stop)以外のロジックどう実装すればいい?

OnStart、OnStopというサービスAPIに呼ばれる以外のメソッドを定義し、コマンドラインパラメータによってそれぞれのメソッドが呼び出されるようにすればいいと思います。

15
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?