Skip to content

stofu1234/PowerPuppet

Repository files navigation

PowerPuppet

常駐サービスをPowershellで記述するためのC#ラッパー

###概略 常駐型のサービスをPowershellスクリプトで記述するためのアプリケーションです。

基本的にはexeの内容は変えず、アプリケーションによってスクリプトの内容を変更することにより
Windowsのサービスという仕組みの中でUNIXのデーモン起動スクリプトのような手軽さを実現します。

LinuxのオープンソースアプリがWindowsに移植された場合、
サービス化されていないままリリースされる事が多々あります。

想定される使用方法の一つとして、それらをサービス化する、そのハードルを引き下げることができると思います
(MITライセンスでリリースされた、サンプルのps1を改修することにより、多種のアプリへ容易に対応できます)

そのような使用方法の場合、スクリプトの内容は主に以下のようになると思います

  • サービス起動・停止ロジック
  • その他エラーハンドリングロジック
  • サービスインストール情報

その他の使用方法としては以下を想定しています

  • 常駐させることがほぼ必須なFileSystemWatcherと組み合わせるような使い方
  • 通常の監視エージェントとは別に、どうしても独立常駐プロセスで特別に監視をしたい場合
  • その他あなたの考えるWindowsサービスの使い方

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

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

(MSBuild.exeは<windir>\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は<windir>\Microsoft.NET\Framework[|64]\v*.*.*****にあります)

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

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

###動作概略 1.常駐サービス動作時は以下のプロパティ・メソッドがps1上にある場合、
 サービス起動時に同プロパティを読み取ったり、
 メソッドが逐次呼び出されます。
 もし、C#サービスの仕様から不足しているプロパティ・メソッドがある場合は
 Service1.csに記述があるので改修してください。
 (System.ServiceProcess.ServiceBaseのプロパティ・メソッドです)

・プロパティ
ServiceName
CanStop
CanShutdown
CanPauseAndContinue
CanHandlePowerEvent
CanHandleSessionChangeEvent
AutoLog
ExitCode

・メソッド
OnStart
OnStop
OnContinue
OnCustomCommand
OnPause
OnPowerEvent
OnSessionChange
OnShutdown
Dispose

2.インストーラ動作時
ps1中のgetServiceProcessInstallerメソッドが呼び出され、

System.ServiceProcess.ServiceProcessInstaller
System.ServiceProcess.ServiceInstaller

2クラスのインスタンスにプロパティ設定をし、リターン値としてC#に引き渡されます。

動作を変えたい場合は上記2クラスのプロパティやイベントを変えてください。

Powershellでのイベントの変え方は、下記のURLを参考にしてください。
(おそらく、add_~メソッドにスクリプトブロックを渡すだけだと思います。)

[PowerShell]VisualBaiscとPowerShellのイベント処理の比較
http://d.hatena.ne.jp/newpops/20070120/p1

###残課題 1.Powershell2.0、.NetFramework4.5に依存しているので Pashみたいに複数環境に対するビルドができるようにしたいです。

About

常駐サービスをPowershellで記述するためのC#ラッパー

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published