トップへ(mam-mam.net/)

サービスアプリケーションの作成 ~Delphiソースコード集

検索:

サービスアプリケーションの作成 ~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サーバーがサービスとして動作しているのが確認できました。