Apa yang dimaksud dengan aplikasi service?
- Aplikasi service adalah aplikasi yang berjalan secara background pada windows dan tidak mempunyai bentuk visual berupa form
- 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
- 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.
- Plih Menu File, New, Other
-
Akan muncul kotak pilihan seperti dibawah ini, pilih Service Application
-
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
- Name
- Simpan kode program. Misal dengan nama unit: unitGantiWallpaper dan nama project: GWallpaper.dpr kemudian Compile kode program. Anda akan mendapatkan file ber-ekstensi exe
-
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 - 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"
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.
kenapa kamu nggak bikin website pribadi ajah, tinggal bikin subdomain :3
BalasHapussalam kenal yah,
mampir ke blogku http://arachmadiputra.tk ^_^
atau workspace ku di http://www.cimorepo.tk