NTサービスはWindowsプログラムを起動する--NTService


NTサービスからWindowsプログラムを起動
通常、NTサービスはコンソールアプリケーションであり、メッセージループはありません.ユーザがコンピュータにログインするまで待つ必要がなく、NTサービスが起動し、ユーザがログインした後も動作を停止することはありません.しかし、既存のActiveXコントロールの多くは難しく、コンソールプログラムで使用できない場合があります.
一方、MFCやVBプログラムはWindowsアプリケーションなので、MFCやVBプログラムでActiveXコントロールを使うのはかなり簡単です.MFCとVBプログラムをNTサービスのように実行できればいいです.
•ユーザーがコンピュータにログインする前に起動
•ユーザーがコンピュータにログインした後も実行
Windowsプログラムの形式でNTサービスを直接書くことができますが、本稿ではより簡単な解決方法を提供します.本明細書の付属ソースコードは、他のプログラムを起動および閉じることができる簡単なNTサービスプログラムである.あなたがしなければならないのは、このサービスをインストールし、修正することです.iniファイル.以下に、このNTサービスを使用するメリットを示します.
•指定した複数のプログラムを起動できます.起動されたプログラムはNTサービスのように実行されます(たとえば、ユーザーがマシンにログインしなくてもバックグラウンドで実行されます).
•適切な特権がない場合、ユーザは、機器が停止しない限り、このサービスによって起動されたプログラムを終了することはできません.
•NTサービス以外でプログラムをテストおよびデバッグできます.たとえば、DevStudioデバッガでプログラムを実行したり、ソースコードに単一ステップでエラーを検索したりすることができます.「デバッグが間違っていない」と、製品として構成し、NTサービスから起動します.
XYNTService
XYNTService.exeは、このNTサービスプログラム実行可能ファイルの名前です.これは私が開発したお客様-サーバ開発ツールの一部です.本明細書に含まれるソースコードを無料で使用および変更できます.XYNTServiceとほぼ同じ機能を提供する他のツールもあることを知っています.しかし、ご覧のように、XYNTServiceはより多くの機能を持ち、使いやすくなります(レジストリの編集は必要ありません).このプログラムの使用方法を次に示します.•サービスをインストールするには、コマンドプロンプトの下で次のコマンドを実行します:XYNTService-i•サービスをアンインストールするには、コマンドプロンプトの下で次のコマンドを実行します:XYNTService-uデフォルトでは、コンピュータの再起動時にインストールされたサービスが自動的に起動します.サービスアイコンを使用して、コントロールパネルからサービスを開始および閉じることもできます.サービスが開始すると、XYNTServicesに1つずつ作成されます.iniファイルで定義されているすべてのプロセス.サービスが停止すると、これらのプロセスは逆の順序で終了します.XYNTService.iniファイルは実行可能ファイルと同じディレクトリに置くべきです.このファイルの一例を次に示します.
  [Settings]
ServiceName = XYNTService
ProcCount = 3
CheckProcess = 30
[Process0]
CommandLine = c:/MyDir/XYRoot.exe
WorkingDir = c:/MyDir
PauseStart = 1000
PauseEnd = 1000
UserInterface = Yes
Restart = Yes
[Process1]
CommandLine = c:/MyDir/XYDataManager.exe
WorkingDir = c:/MyDir
PauseStart = 1000
PauseEnd = 1000
UserInterface = Yes
Restart = Yes
[Process2]
CommandLine= java XYRoot.XYRoot XYRootJava.ini
UserInterface = No
Restart = No

ServiceNameプロパティは、このNTサービスで使用する名前を指定します.デフォルトの名前はXYNTServiceです.実行可能ファイルをコピーする場合と.intファイルを異なるディレクトリに、intファイルでServiceNameプロパティを変更すると、異なるサービスをインストールおよび構成できます.
ProcCountプロパティは、このサービスを作成するプロセスの数を指定します.セクション[process 0]、[process 1]などは、関連プロセスのプロパティを定義します.ご覧のように、この例では3つのプロセスを作成します.XYRoot.Exce,XYDataManager,javaはプログラム名であり,プロセスごとにCommandLine属性にパラメータを指定することができる.実行可能ファイルがシステムパスにない限り、CommandLineプロパティで対応するプロセスに実行可能ファイルの完全なパスを指定する必要があります.
CheckProcessプロパティは、XYNTServiceが起動したプロセスをチェックするかどうかを指定し、チェックの頻度も指定します.この属性の値が0の場合、チェックは行われません.属性の値が30の場合、30分ごとにXYNTServicesはオペレーティングシステムに問い合わせて起動したプロセスがまだ実行されているかどうかを確認します.プロセスのRestart属性値(バックドアの説明)がYesと定義されている場合、終了した再起動が行われます.このアトリビュートのデフォルト値(指定していない場合)は60です.
WorkingDirプロパティは、現在のプロセスの作業ディレクトリです.このプロパティを指定しない場合、現在のプロセスの作業ディレクトリはX:/wint/system 32になります.PauseStartプロパティは、サービスが現在のプロセスを開始した後に待機する時間(ミリ秒単位)です.このオプションは、次のプロセスが前のプロセスに依存する必要がある場合に便利です.たとえば、2番目のプロセスは、1番目のプロセスが初期化された後に再実行するために、1番目のプロセスに接続しなければなりません.PauseStartプロパティを指定しない場合、デフォルトは100ミリ秒になります.
XYNTServicesがクローズすると、まず作成したプロセスにWM_を送信します.QUITメッセージを呼び出し、Win 32関数TerminateProcessを呼び出します.PauseEndプロパティは、TerminateProcessを呼び出す前にサービスが待機する時間(ミリ秒単位)です.このプロパティは、プロセスのパージとクローズの機会を与えるために使用できます.PauseEndプロパティを指定しない場合、デフォルトは100ミリ秒になります.
UserInterfaceプロパティは、ログインしたユーザーがXYNTServiceが作成したプロセスを表示できるかどうかを制御します.ただし、XYNTServiceがローカルシステムアカウントで実行されている場合にのみ機能します.デフォルトでは、このようになります.この場合、XYNTServiceが作成するプロセスは、特定のユーザーの設定にアクセスできません.XYNTServiceをユーザーアカウントの下で実行するように設定できます.コントロールパネルでは簡単に実行できます(サービスアイコンをダブルクリックし、インストールされたサービスリストでXYNTServiceポップアップ構成ダイアログボックスをダブルクリックします).
Restartプロパティを使用して、終了したプロセスをXYNTServiceで再起動するかどうかを決定します.このプロパティがNo(デフォルト)の場合、対応するプロセスは再起動されません.Yesの場合、終了したプロセスはXYNTServiceによって再起動されます.プロセスの終了を開始する頻度は、上のCheckProcessプロパティによって指定されます.
コマンドラインからリバウンド(停止と再起動)できます.intファイルで定義されているプロセス.たとえば、次のコマンドがあります.
XYNTService -b 2

停止して再起動します.Iniの[process 2]セクションで定義されているプロセス.
MXYNTServiceは、コマンドラインから他のサービスを開始および停止するためにも使用できます.次はrunおよびkillの他のサービスを開始するコマンドです.
  XYNTService -r NameOfServiceToRun
XYNTService -k NameOfServiceToKill

特に、コマンドラインで上記のコマンドを使用してXYNTService自体を起動および停止できます.パラメータなしでXYNTServiceを起動することはできません.
XYNTServiceの実行中に発生したエラーはすべてログファイルに書き込まれます.このファイルは実行可能ファイルと同じディレクトリにあります.ログ・ファイルのエラー・コードは、GetLastError APIが返す10進数です.MSDNで詳細を表示できます.