サービスアプリケーションの作成 ~Delphiソースコード集
Delphiでサービスアプリケーションを作成してみます。作成したアプリはコントロールパネル⇒管理ツール⇒サービスに登録することができます。
サービスに登録すると、WindowsにログオンしなくてもPCの電源をOnにするだけでアプリケーションが動作します。
ただし、ウィンドウ等を表示させることはできません。今回はWEBサーバー(といっても超簡易です)のWindowsサービスを作成してみます。
プログラムも10行程度しか入力しません。
Delphiを起動して新規作成を行う
Delphiを起動し、ファイル→新規作成→その他・・・をクリックします。左ペインの「Delphi プロジェクト」を選択し、右ペインの「サービスアプリケーション」をクリックし「OK」ボタンをクリックします。
以下の表示が出た場合は「OK」をクリックします。
以下画面になります。
Unit1のタブをクリックします。
ツールパレットからTIdHTTPServerをドラッグ&ドロップします。
プロパティのDefaultPortを8100にします。
とりあえず保存する
そろそろプログラムを記述する
IdHTTPServer1をクリックして選択し、「イベント」タブに切り替えます。次にOnCommandGetの右側の個所をダブルクリックします。
procedure TService1.IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); var strm:TStringStream; st:string; begin AResponseInfo.ContentType:='text/html; charset=UTF-8'; st:='<html>'+ '<head><meta charset="UTF-8"></head>'+ '<body>リクエストに応答</body>'+ '</html>'; strm:=TStringStream.Create(st,TEncoding.UTF8); AResponseInfo.ContentStream:=strm; end;
キーボードの「F12」キーをおして、デザインモードに切り替え、フォームの何もないところ(下図の青い矢印あたり)をクリックし、「イベント」タブに切り替えます。
次にOnExecuteの右側の個所をダブルクリックします。
以下ソースコードを記述して、保存ボタンを押しましょう。プログラムはこれで終了です。
procedure TService1.ServiceExecute(Sender: TService);
begin
IdHTTPServer1.Active:=True;
while not Terminated do
begin
ServiceThread.ProcessRequests(True);
end;
IdHTTPServer1.Active:=False;
end;
コンパイルする
「プロジェクト」→「全てのプロジェクトのビルト」をクリックします。] 保存先フォルダの、win32のDebugフォルダにコンパイルされたProject1.exeファイルが生成されています。
インストールと実行
Cドライブ直下にtestという名前のフォルダを作成し、コンパイルされたProject1.exeファイルをコピーします。管理者権限コマンドプロンプトを起動します。(スタート→Windowsシステムツールにあるコマンドプロンプトを右クリックして「その他」→「管理者として実行」)
以下コマンドを入力して、サービスをインストールします。
cd \test Project1.exe -install
サービスの開始
スタートを右クリック→コントロールパネル→管理ツール→サービスを選択して表示させます。スクロールして「Service1」という名前を探します。
「Service1」を右クリックして「開始」をクリックします。
ブラウザを起動してテストする。
ブラウザを起動します。URLに
http://localhost:8100/
と入力してEnterキーを押します。
WEBサーバーがサービスとして動作しているのが確認できました。