Membuat Aplikasi Service pada Windows

Apa yang dimaksud dengan aplikasi service?

  • Aplikasi service adalah aplikasi yang berjalan secara background pada windows dan tidak mempunyai bentuk visual berupa form
Kenapa harus memakai aplikasi service?
  • Agar aplikasi dapat berjalan tanpa dihentikan oleh aplikasi lain dan tidak tampak oleh pengguna windows. Biasanya, programmer menggunakan aplikasi service untuk  melakukan kegiatan yang berulang-ulang selama sistim operas Windows berjalan
Berikan contoh-contoh aplikasi yang menggunakan service
  • Aplikasi yang melakukan update software secara periodik
  • Mengganti wallpaper secara periodik, misal tiap setengah jam

Berikut ini adalah langkah-langkah membuat aplikasi service di windows. Saya memakai Delphi 7. Namun dengan sedikit penyesuaian dapat juga diterapkan pada Delphi versi berapa pun.

  1. Plih Menu File, New, Other



  2. Akan muncul kotak pilihan seperti dibawah ini, pilih Service Application




  3. Ada beberapa property yang perlu diperhatikan.
    • Name
      Apa yang anda berikan pada name akan nampak pada daftar service, tidak boleh mengandung spasi, dan terdaftar di registry:

      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

      Pada contoh di artikel ini, saya menggunakan name GantiWallpaper
    • Display Name
      Nama di property boleh memakai spasi, dan akan tampil di service applet. Pada contoh di artikel ini, saya menggunakan Display Name Service Pengganti Wallpaper
    • ServiceStartName
      Aplikasi service adalah aplikasi yang sensitif terhadap sekuriti, sehingga membutuhkan user dan password. Pada property ini dan password-lah anda harus mengisi. Jika belum tahu, anda dapat mengosongkannya terlebih dahulu. Nantinya, anda dapat mengisinya saat service di-install




  4. Simpan kode program. Misal dengan nama unit: unitGantiWallpaper dan nama project: GWallpaper.dpr kemudian Compile kode program. Anda akan mendapatkan file ber-ekstensi exe
  5. Jalankan aplikasi service dengan cara:
    Tampilkan command console window. Ketik: GWallpaper /install



    Jika anda tak menginginkan kotak informasi Service installed successfully, anda dapat mengganti perintah diatas menjadi GWallpaper /install /silent

    Untuk memastikan, apakah program GWallpaper terpasang, tampilkan jendela service applet. Tampilannya seperti dibawah ini:



    Sebalikknya, untuk melepas service dari daftar service windows, anda tinggal mengganti install dengan uninstall seperti berikut:

    GWallpaper /uninstall
  6. Perintah pada install hanya memasang aplikasi sedangkan untuk menjalankannya, anda beberapa yang harus ditempuh

    Cara Pertama:
    • Tampilkan service applet
    • Klik kanan satu kali dengan mouse
    • Pilih Start


    Cara Kedua:

    • Tampilkan console windows
    • Ketik: net start "service pengganti wallpaper"


untuk memeriksa, apakah service ini benar-benar berjalan, anda dapat memeriksa dengan cara: munculkan taskbar dengan menekan: Ctrl + Alt + Del. Lantas carilah nama service-nya: GWallpaper.exe





Mengisi Description Service pada Service Applet
Jika Anda jeli, Anda akan melihat bahwa description pada service kosong. Class TService tidak menyediakan cara untuk mengisi. Mau tidak mau, kita harus mengisi secara manual.

Karena tulisan description tertulis di registry, maka kita akan membuat program untuk menulis description langsung pada registry. Program tersebut ditulis pada bagian AfterInstall sebagai berikut:


procedure TGantiWallpaper.ServiceAfterInstall(Sender: TService);
var
    Reg : TRegistry;
begin
    Reg := TRegistry.Create(KEY_READ or KEY_WRITE);

    try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name, false) then
        begin
            Reg.WriteString('Description', 'Program Pengganti Wallpaper secara periodik');
            Reg.CloseKey;
        end;
    finally
        Reg.Free;
    end;
end;


Jika anda sudah pernah meng-install Gwallpaper, lantas meng-update dan meng-compile program, jangan lupa untuk terlebih dahulu mematikan service lewat console window:

net stop "service pengganti wallpaper"

atau lewat service applet. Apabila lupa, sudah pasti akan terjadi error.

Sekarang compile program dan install service. Kemudian lihat pada bagian description seperti dibawah ini:



Ada dua cara yang umum dalam menjalankan service. Pertama menggunakan OnExecute atau OnStart. Baik OnExecute dan OnStart mempunyai kekurangan dan kelebihan.

Kelebihan OnExecute
Program Anda akan terlihat lebih sederhana. Tidak membutuhkan thread lain (secondary thread). Menghentikan service sementara (Pause)  dan menjalankan kembali (Resume) tidak memerlukan tambahan kode program.

Kekurangan OnExecute
Jenis program yang dijalankan OnExecute adalah program yang dapat dieksekusi secara cepat. Jika tidak, saya sarankan Anda menggunakan OnStart.

Kelebihan OnStart
Waktu eksekusi aplikasi service dapat lebih lama dibandingkan jika dijalankan di OnExecute. Jangan lupa untuk selalu memeriksa true-false variabel Terminated agar threads dapat seketika bereaksi jika mendapat perintah dari SCM

Kekurangan OnStart
Tidak dapat bereaksi dengan cepat atas perintah Resume dan Pausing. Kita juga harus mendefinisikan secara mandiri perintah untuk OnPause dan OnContinue dan memberitahukan kepada thread. (Lebih sulit,ya?)


Menjalankan Service Memakai OnExecute
Baris perintah dalam OnExecute dijalankan terlebih dahulu sebelum OnStart. Perintah di dalam OnExecute akan langsung dieksekusi begitu thread yang berhubungan dengan servise dijalankan. Jika Anda tidak meletakkan baris perintah utama service di OnStart, maka disinilah seharusnya anda meletakkan program utama service. Sebagai tambahan, jangan lupa memanggil prosedur ProcessRequest milik thread agar terjadi giliran eksekusi antara proses di thread dan di program lain. Jika tidak, maka ada kemungkinan Windows akan terasa seperti hang (berhenti sesaat)

Contoh baris perintah dalam OnExecute adalah sebagai berikut:

procedure TServiceForMe.ServiceExecute(Sender: TService);
begin
  while not Terminated do
  begin
    //Letakkan baris perintah utama service disini
    GantiWallPaperWindows;
    
    //Memberikan jeda henti selama 1 menit sebelum ganti wallpaper lain
    Sleep(60000);

    //Memberikan kesempatan aplikasi lain jalan
    //terlebih dahulu sebelum service menjalankan programnya lagi
    ServiceThread.ProcessRequests(False);
  end;
end;


Terminated adalah milik thread yang dijalankan. Maksud dari while not terminated adalah: apabila thread tidak berhenti, makan program agar berjalan terus. Setelah berhenti selama satu menit, aplikasi akan menjalankan aplikasi Windows yang lain dengan perintah:

ServiceThread.ProcessRequests(False);

Perlu diperhatikan. Anda harus memperkirakan waktu eksekusi service. Andai waktu eksekusi terlalu lama, maka lebih baik Anda meletakkan eksekusi utama service di OnStart saja.


Menjalankan Service Memakai OnStart
Baris perintah dalam OnStart dijalankan sesudah baris perintah dalam OnExecute. Biasanya programmer memakai OnStart karena ada beberapa bagian program yang harus mempunyai nilai awal dan harus diberi terlebih dahulu.

Pada metode OnStart, Anda memerlukan thread lain untuk menjalankan isi service yang sesungguhnya. Kode program ini diletakkan dalam unit tersendiri, contoh: MyServiceThreadUnit. Instankan obyek di OnStart, contoh:

MyServiceThread := TMyServiceForMeThread.Create;

Contoh baris perintah dalam OnStart:


procedure TServiceForMe.ServiceStart(Sender: TService; var Started: Boolean);
begin
  MyServiceThread := TMyServiceThread.Create;
  MyServiceThread.Resume;
end;

procedure TServiceForMe.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  MyServiceThread.Terminate;
end;

Karena TMyServiceThread ada di Unit MyServiceThreadUnit, maka jangan lupa menyertakan di bagian uses seperti ini dan mendeklarasikan variabel instan di bagian private.



Uses  Windows, Messages, SysUtils, MyServiceForMeUnit

private
    MyServiceThread: TMyServiceThread;


Sedangkan MyServiceForMeUnit dapat berupa seperti dibawah ini:

unit MyServiceForMeThreadUnit;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics;

type
  TMyServiceForMeThread = class(TThread)
  private
  protected
    procedure Execute; override;
  public
    constructor Create;
  end;

implementation

constructor TMyServiceForMeThread.Create;
begin
  FreeOnTerminate := True;
  inherited Create(True);
end;

procedure TMyServiceForMeThread.Execute;
begin
  while not Terminated do  
  begin
      //Tempatkan program utama service disini
    Sleep(1000);
  end;
end;

end.

Membuat Aplikasi Service pada Windows Rating: 4.5 Diposkan Oleh: Good Dreamer

1 comments:

  1. kenapa kamu nggak bikin website pribadi ajah, tinggal bikin subdomain :3

    salam kenal yah,
    mampir ke blogku http://arachmadiputra.tk ^_^
    atau workspace ku di http://www.cimorepo.tk

    BalasHapus

Diberdayakan oleh Blogger.