コマンド実行サービス for Windows NT Ver 1.2  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1.【機能】 本ソフトは、WindowsNT上で、サービス化されていない各種実行ファイル(EXE)を サービスのように起動するソフトです。 WindowsNT系OSのサービスとして動作し、指定コマンドの実行を行います。 また、サービス停止時には起動したコマンドに対してTerminateProcessを 発行して起動コマンドを強制終了させます。 Version 1.0より複数サービス登録をサポートしました。 Version 1.2より環境変数参照をサポートしました。 2.【ファイル構成】 以下のファイルが同梱されています。 ・ExecSvc.exe : 実行ファイル ・ExecSvc.ini : 初期設定ファイル(サンプル) ・ReadMe.txt : 説明書(本ファイル) ・StartSvc.bat : サービス起動用バッチファイル ・StopSvc.bat : サービス停止用バッチファイル(サンプル) ・env.bat : 環境変数確認用バッチファイル ・InstSvc.exe : サービス登録・削除用実行ファイル(サンプル) ・ChkConf.exe : ExecSvc.iniのチェック用プログラム 3.【動作確認環境】 (1) Windows NT Workstation 4.0 SP3 (2) Windows NT Server 4.0 SP3 (3) Windows 2000 Server SP1 (4) Windows 2000 Professional SP1 (5) Windows XP Professional 4.【インストールおよびサービス登録】 (1) 適当なディレクトリを作成し、同梱ファイルを解凍します。 v1.0で複数のサービスとして登録する場合、必要なだけ別ディレクトリに 解凍してください。 v1.1以降は同一ディレクトリで複数のサービス登録が可能ですので、 実行ファイル(ExecSvc.EXE)を必要なだけ、別名でコピーしてください。 (2) コマンドプロプト上で、上記ディレクトリに移動し、 instsvc [オプション] インストールパス\ExecSvc.EXE [改行] でサービス登録します(必ずフルパスで指定してください)。 複数のサービスとして登録する場合、区別できるようにオプションで サービス名と表示名を指定してください。 [オプション] -a スタートアップの種類を自動に設定します。 -s サービス名 実サービス名をExecuteService以外に変更する場合に指定します。 -nオプションを指定しない場合、表示名も同じになります。 -n 表示名 表示名とはコントロールパネルのサービス一覧で表示される 名前のことです。実サービス名はExecuteServiceのままです。 c:\execsvc に解凍したときの例を示します。 例) スタートアップの種類を自動にし、表示名をntfmlにする場合 instsvc -a -n ntfml c:\execsvc\execsvc.exe 例) サービス名および表示名をntfmlにする場合 instsvc -s ntfml c:\execsvc\execsvc.exe 例) サービス名をntfml、表示名をfml for WindowsNTにする場合 instsvc -s ntfml -n "fml for WindowsNT" c:\execsvc\execsvc.exe 空白を含む場合はダブルクォーテーションで括ってください。 注) Windows 2000やXP Professionalではコンピュータの管理の中にサービスがあります。 5.【初期設定ファイル】 [ファイル名] ExecSvc.ini(デフォルト) v1.1 より実行ファイルの拡張子をiniに置き換えたファイルを見るようにしました。 つまり、ExecSvc.EXEならexecsvc.ini、ntfml.exeにリネームしてたらntfml.iniを見ます。 [格納場所] 実行ファイル(ExecSvc.exe)と必ず同じフォルダに格納してください。 [記述書式] 記述内容は以下のとおり。 (1) セクション指定(任意) 1セクションに付き1コマンドの指定のため、複数のコマンドを指定したい場合 セクション名を付けてセクション指定します。 書式) [セクション名] 例 ) [ntfml] 備考) 複数コマンドを起動する場合は必須。 単独の場合はなくてもよい(旧バージョンとの互換のため) 半角英数字で指定してください。 同一名称のセクション名はエラーです(大文字小文字は区別しません)。 全角は不可。 (2) コマンド指定(任意) 実行したいコマンドをフルパスで指定します。 環境変数を参照する場合 % でくくってください(大文字小文字は区別しません)。 書式) EXE = ExecSvcに起動させたい実行ファイル(フルパスで指定) 例1 ) EXE = c:\perl\perl.exe 例2 ) EXE = %ProgramFiles%\perl\perl.exe 備考) 指定が無い場合、そのセクション自体が無視されます。 (3) 引数指定(任意) 指定コマンドの実行時のコマンド引数を指定します。 環境変数を参照する場合 % でくくってください(大文字小文字は区別しません)。 書式) ARG = ExecSvcに起動させたい実行ファイルに渡す引数 例1 ) ARG = c:\fml\ntfml.pl -u 300 例2 ) ARG = %systemroot%\system32\drivers\etc\hosts 備考) 指定が無い場合はコマンドに引数を渡しません。 (4) カレントディレクトリ指定(任意) 指定コマンドの実行時のカレントディレクトリを指定します。 環境変数を参照する場合 % でくくってください(大文字小文字は区別しません)。 書式) DIR = ExecSvcが実行ファイル起動時のカレントディレクトリ 例1 ) DIR = c:\fml 例2 ) DIR = %TEMP% 備考) 指定が無い場合はExecSvcのディレクトリとなります。 (5) ログ出力指定(任意) ログの出力有無を指定します。 書式) LOG = ON または OFF 例 ) LOG = OFF 備考) ON : ログ出力モードを設定します(デフォルト) OFF: ログ出力モードを解除します。 指定が無い場合はデフォルトになります。 初期設定ファイル中に何度指定してもかまいません。 指定以降、そのモードになります。 ログファイルはExecSvc.logです。 ExecSvcと同じディレクトリに作成します。 (6) ログレベル指定(任意) ログに出力する情報のレベルを指定します。 v1.2以降はレベルに関わらず、MESSAGE行は出力します。 書式) LEVEL or LVL = 数字(0から3) 例1 ) LEVEL = 1 例2 ) LVL = 2 備考) 0 : エラーのみ出力 1 : エラー、警告を出力(デフォルト) 2 : エラー、警告、一般情報を出力 3 : エラー、警告、一般情報、デバッグ情報を出力 指定が無い場合はデフォルトになります。 初期設定ファイル中に何度指定してもかまいません。 指定以降、そのレベルになります。 (7) コメント行(任意) 書式) #が行頭にあるとコメント行とみなします。 (8) 依存指定(任意) 他のコマンドが起動済であることに依存するようなコマンドを指定する場合に 依存するコマンドを記述したセクションを指定する。 書式) DEPEND or DPN = 依存するセクション名 例1 ) DEPEND = ntfml 例2 ) DPN = ntfml 備考) 依存する他のセクションのコマンドの起動が正常の場合にのみ 当該セクションのコマンドを起動します。 指定が無い場合は他のセクションに依存せずにコマンドを起動します。 指定可能な依存セクションは、依存指定を行うセクションより前に 記述されている必要があります。 (9) 依存指定その2(任意) 他のコマンドが起動失敗したことに依存するようなコマンドを指定する場合に 依存するコマンドを記述したセクションを指定する。 書式) DEPENDF or DPNF = 依存するセクション名 例1 ) DEPENDF = ntfml 例2 ) DPNF = ntfml 備考) 依存する他のセクションのコマンドの起動エラーの場合にのみ 当該セクションのコマンドを起動します。 指定が無い場合は他のセクションに依存せずにコマンドを起動します。 指定可能な依存セクションは、依存指定を行うセクションより前に 記述されている必要があります。 (10) 待ち時間指定(任意) 先に実行されたコマンドとの時間差が必要な場合に待ち時間を指定する。 書式) SLEEP or SLP = 実行待ち時間(ミリ秒単位) 例1 ) SLEEP = 1000 (=1秒) 例2 ) SLP = 2000 (=2秒) 備考) 依存する他のセクションのコマンドの起動後、すぐに当該コマンドを 実行するとエラーになるような場合に待ち時間を指定します。 指定が無い場合は直ちにコマンドを起動します。 指定はミリ秒単位で指定します(1000ミリ秒 = 1秒)。 指定可能範囲は0〜60000(=60秒)です。 実行待ちの時間は、依存コマンド実行後からではなく、 当該コマンドの実行直前からの時間です。 (11) 優先度指定(任意) 実行したいコマンドのプロセスの優先度を指定する。 書式) PRIORITY or PRI = 優先度指定文字列 例1 ) PRIORITY = HIGH (高) 例2 ) PRI = IDLE (低) 備考) 実行コマンドのプロセスの優先度を指定します。 指定が無い場合は通常(NORMAL_PRIORITY_CLASS)になります。 以下の指定が可能です。 IDLE 低 (IDLE_PRIORITY_CLASS) LOW 低 (IDLE_PRIORITY_CLASS) NORMAL 通常 (NORMAL_PRIORITY_CLASS) HIGH 高 (HIGH_PRIORITY_CLASS) REALTIME リアルタイム(REALTIME_PRIORITY_CLASS) 一番高い REAL リアルタイム(REALTIME_PRIORITY_CLASS) 一番高い (12) サービス名指定(任意) サービス名を指定してサービス登録した場合、同じサービス名を指定します。 書式) NAME = サービス名 例 ) NAME = ntfml 備考) サービス登録時にサービス名を指定した場合は必須 指定しなくてもなぜか動作はしますが(サービス名を見ないのかな)、 念のため指定しておいてください。 半角英数字で指定してください。 (13) ログモード指定(任意) ログファイルを初期化するモードを指定します。 書式) LOGMODE = 数字(0から2) 例 ) LOGMODE = 2 備考) 0 : 初期化しない(常に追加で出力) 1 : 初期化(LOGMODE指定行を読み込んだ時点) 2 : 終了時に削除 指定が無い場合はデフォルトになります。 初期設定ファイル中に何度指定してもかまいません。 指定以降、そのモードになりますが、1を指定した場合の初期化は 一回しか行われません。 注) 同じセクションに同種の指定をした場合、後の指定が有効になります。 同梱したサンプルのExecSvc.iniを参考にしてください。 EXEを一個しか起動しない場合、V0.2以前のExecSvc.iniを そのまま利用できます(ログを出すにはLOG行、LVL行を追加してください)。 環境変数として%EXECSVC%を記述した場合、ExecSvcの起動パスに置き換わります。 ただし、本当に環境変数としてEXECSVCが設定されていればその値に置き換わります。 6.【初期設定ファイルのチェック】 同梱のChkConf.exeでExecSvc.iniファイルのチェックを行えます。 書式) ChkConf [オプション] ExecSvc.iniの相対または絶対パス 例) ChkConf ExecSvc.ini 例) ChkConf C:\execsvc\ExecSvc.ini 例) ChkConf ntfml.ini ・「No fatal errors.」 と表示されれば、ExecSvc.iniは一応OKです。 ただし、指定したコマンドが存在しない場合はWARNINGが出ます。 ・「Fatal error exists in ...」 と表示されれば、ExecSvc.iniに 重大なエラーがあります。修正してください。 ・ExecSvc.iniでログ出力(LOG=ON)およびログレベル(LVL行)がある場合、 それにしたがって情報が出力されます。 デフォルト値はExecSvc本体と同じ。 [オプション] -d : 詳細表示指定 ExecSvc.ini内のLOG行、LVL行を無視してLOG=ON、LVL=3とする 例) ChkConf -d ExecSvc.ini 例) ChkConf -d ntfml.ini (ExecSvc.EXEをntfml.exeに名前を変えた場合) 7.【サービスの実行】 (1) インストールディレクトリにある初期設定ファイル(ExecSvc.ini)を テキストエディタで編集します。 (2) ChkConf.exeで初期設定ファイルのチェックをします(前述)。 (3) コントロールパネルのサービスから、ExecuteServiceを選択し、 開始を押します。インストール時に表示名を指定した場合は その名前になっていますので、それを選択し開始します。 または、同梱のStartSvc.batを実行します。 サービス名を変更している場合はStartSvc.batも修正してください。 (4) エラーがない場合はタスクマネージャのプロセスリスト上に、 ExecSvc.exeとともに、ExecSvc.iniに記述したプログラムが 見つかるはずです。 (5) 起動時に自動的にサービス開始する場合、サービスのスタートアップで 自動を選択してください。または、サービス登録時に-aオプション付きで 登録してください。 注) Windows 2000やXP Professionalではコンピュータの管理の中にサービスがあります。 8.【Q&A】 (1) Q) サービス開始時にエラーにならなかったのに、コマンドが起動されません。 A) 起動したコマンドがすぐに終了したことが考えられます。 タスクマネージャ上に目的のプログラムがない場合、 以下のことを確認してください。 ・タスクマネージャのプロセスを見ながらサービスを開始する。 一瞬起動したがすぐに終了した場合、起動コマンド自体または、 起動コマンドに渡した引数に問題があるなどが考えられます。 ExecSvcとしては正常に動作しています。 ・ログファイルを見る。 ログファイルの出力を指定しているのにログファイルができない場合や 中身がおかしい場合、ExecSvc側に問題があると考えられます。 ログファイルにエラーが出ていない場合、起動コマンド側の問題と考えられます。 (2) Q) ログファイルの見方がよくわかりません。 A) 出力レベルにより出力される内容が異なります。 ・出力書式) 日付 時間 情報レベル: 情報 日付) 年(西暦4桁)/月/日 時間) 時:分:秒.ミリ秒(ミリ秒を出した意味はありません(^^;) 情報レベル) ERROR: エラー(実行不可) WARNING: 警告(実行可能だが将来エラーにするかもしれないなど) INFO: 通常の情報 DEBUG: デバッグ情報(どうしても旨く動かないときの問い合わせ用) ERRORは情報をみてExecSvc.iniの間違いを修正してください。 特定の行でエラーになるようなものはline=行番号が一緒に出力されます。 ・ログ出力レベルが 0 の場合 ERRORのみが出力されます。 ・ログ出力レベルが 1 の場合 ERROR、WARNINGが出力されます。 ・ログ出力レベルが 2 の場合 ERROR、WARNING、INFOが出力されます。 ・ログ出力レベルが 3 の場合 ERROR、WARNING、INFO、DEBUGが出力されます。 バグ報告や問い合わせのときはレベル3のログファイルを添付してください。 (3) Q) Perl.exeを起動して、ARGにntfml.plを指定したがfmlがうまく動作しない。 A) fmlはカレントディレクトリからの相対パスを参照する部分があるので、 fml用にExecSvcを利用する場合は、DIR=行は必須です。 fmlのインストールパスをDIR行に指定してください。 注) 最新版のfmlは未確認です。 (4) Q) ver 1.0で正式版になるとフリーでなくなるの? A) 安心してください。ずっとフリーです。 (5) Q) Windows XPで動作するの? A) Windows XP Professionalでの動作を確認しました。 (6) Q) セクションを複数指定した場合、起動順番、終了順番はどうなりますか? A) ExecSvc.iniのセクションに記述した順に起動します。 終了は逆順に終了します(ただし、V0.3は起動順と同じ順で終了)。 (7) Q) 指定したコマンドだけ止めたいのですが? A) (i) v0.6までの場合 対応していません。 (ii) v1.0の場合 個別に停止させる必要がある場合は、 まず、ExecSvcを複数インストールします。 次にそれぞれ別のサービス名でサービス登録した上で、 それぞれのディレクトリのExecSvc.iniファイルに 必要なコマンドを記述してください。 インストール単位(サービス登録単位)で起動、停止を行ないます。 (iii) v1.1以降の場合(v1.0の方式も可能です) 個別に停止させる必要がある場合は、 まず、ExecSvc.EXEを違う名前でコピーします。 実行ファイル名と初期設定ファイル名を連動させましたので、 コピーした名前にあった初期設定ファイルを作成します。 例) ExecSvc.EXEをntfml.exeにコピーした場合、 ntfml.iniを作成(またはExecSvc.iniをコピーして編集) 次にそれぞれ別のサービス名でサービス登録した上で、 それぞれの初期設定ファイル(ExecSvc.ini、ntfml.ini)に 必要なコマンドを記述してください。 サービス登録単位で起動、停止を行ないます。 (8) Q) 一旦、サービスから削除して、すぐに登録し直したら 「サービスの登録に失敗しました (0x430)」となって登録できないんですが? A) コンピュータの管理でサービスを開いた状態でサービスから削除すると、 すぐには消えないようです(Windows 2000で確認)。 一旦、コンピュータの管理を終了し、再度コンピュータの管理を実行し、 サービス中から消えていることを確認してから、再登録してください。 (9) Q) 最新バージョンにUPDATEしたいのですが? A) まず、サービスを停止します。 次に、最新版を解凍し、必要なファイルを置き換えます。 デフォルトの初期設定ファイル(ExecSvc.ini)を使用している場合は、 注意してください。 必要に応じて初期設定ファイルを編集します。 サービスを開始します。 9.【サービスからの削除】 (1) コントロールパネルのサービスから、ExecuteServiceを選択し、 停止を押します。インストール時に表示名を指定した場合は その名前になっていますので、それを選択し停止します。 サービス名を変更していない場合は、同梱のStopSvc.batでも停止できます。 サービス名を変更している場合はStopSvc.batも修正してください。 (2) コマンドプロンプト上でExecSvcのインストールディレクトリに移動し、 instsvc [オプション] remove [改行] でサービスから削除します。 [オプション] -s サービス名 サービス登録時にサービス名をExecuteService以外に変更した場合に指定します。 登録時と同じサービス名を指定してください。 c:\execsvc に解凍したときの例を示します。 例) デフォルトでインストールした場合 instsvc remove 例) サービス名をntfmlにした場合 instsvc -s ntfml remove 10.【アンインストール】 (1) サービスから削除後、インストールフォルダごとファイルを削除して下さい。 11.【著作権・免責等】 著作権は、作者(佐々木 幸三)が保有しますが、このソフトを使用した結果の 損害に対して作者は一切責任を負いません。 セキュリティ(実行ユーザ、ファイルのアクセス権)には十分注意を払って ご使用ください。 12.【転載等】 ベータ版(版数が1.0に満たないものまたはベータの指定があるもの)は転載不可。 正式版は転載可ですが、事後でもいいので連絡ください。 ファイル内容は変更しないでください。 また、転載した場合、バグ修正によるエンハンスがあった時には責任を持って 転載し直してください。 13.【サポートおよびバグ報告】 簡単なツールなので(バグ以外の)設定による問題はChkConfやログファイルで 解決できると思います。 チェックツールやログファイルを見てもどうしても解決できない場合の質問や、 バグ報告は、mailto:ssk@dmail.plala.or.jpまで電子メールにてお願いします。 たぶん、このツールを入手された方は深町さんのfml利用ユーザが ほとんどだと思います。私はfml-help MLに、たまに出没しますが(^^; ExecSvcのサポートの場ではないので、上記メールアドレス宛てにご質問ください。 ホームページssk's HOME(http://www6.plala.or.jp/k-ssk/)上に サポート掲示板を開設しましたので、そちらでもかまいませんが、 掲示板の性質上、内容は公開になります。 要望などは、掲示版の方が気楽でいいかもしれませんね。 14.【制限事項】 (1) 多分大丈夫だとは思いますが、全角文字を使用すると 誤動作の可能性があります(テスト不足です(^^;) セクション名には使えません。 ただし、コメント中は読み飛ばしますので何書いてもOK。 (2) 複数コマンド起動時に停止するコマンドを指定できません(全て停止) 個別停止したい時は、個別サービスにしてください。8.Q&Aの(7)参照。 15.【今後のエンハンス予定】 (1) 単一実行ファイルによる複数サービス登録をやろうかなと思いますが、 初期設定ファイルや機能が非互換になりそうなので、 v2.0か別ソフトとして開発することになるかもしれません。 16.【改版履歴】 日付 Ver 改版内容 1998/05/25 0.1 初版 2000/08/17 0.2 ドキュメント(本ファイル)の修正のみ Windows2000動作確認結果および連絡先メールアドレスの修正 2001/02/10 0.3 サービス起動、終了用バッチファイル追加 ExecSvc.iniのチェック用コマンドを追加 InstSvcに表示名指定オプションを追加 ExecSvcに起動コマンド複数指定を追加 ExecSvcのデバッグ版の代わりにログ出力機能をサポート 2001/05/26 0.4 複数起動時の停止順番を起動順番と逆順に変更。 依存指定対応。 待ち時間指定対応。 セクション名内の全角文字チェック対応。 数値項目の数字チェック対応。 本ファイル中のメールアドレスをniftyからplalaに変更。 2001/07/28 0.5 パス中に空白を含む場合に、一部のソフトで不具合がでるのを修正。 2001/09/01 0.6 プロセス優先度指定を追加 2002/02/02 1.0 複数サービス化対応。 InstSvcにサービス名指定オプションを追加 InstSvcにスタートアップの種類の自動指定オプションを追加 ExecSvc.iniにサービス名指定を追加 以下、使用上は変わりませんが(^^; ExecSvc.ini解析ルーチンのロジック変更 MSVC++を5.0から6.0に変更。 2002/02/09 1.1 実行ファイル名に連動した初期設定ファイル名の対応 2002/12/01 1.2 EXE、ARG、DIRの指定で環境変数の参照をサポート 環境変数確認用バッチファイル添付とiniファイルへのサンプル追加 起動時、終了時のログファイルへのメッセージ出力 LOGMODE行対応の追加 17.【ひとりごと】 とりあえず、現仕様でVer 1.0にします。 以上