Home > Visual Basic > Cara mudah dan gampang membuat aplikasi service dengan VB6

Cara mudah dan gampang membuat aplikasi service dengan VB6

February 18, 2010

Membuat service dengan vb6 memang sangat tidak dianjutkan, makanya jangan heran setelah kita mendownload beberapa source code yang mengklaim bisa membuat service di vb6 dan mencobanya yang ada hanya error pada saat dijalankan atau berhasil sampai mendaftarkan ke service tetapi gagal pada saat ingin running/start.

Tetapi jangan kuatir setelah Anda membaca artikel ini, Anda akan dengan mudah membuat service di windows.

Sebenarnya ini adalah artikel lama tapi kayaxnya masih jarang dibahas diblog-blog pemrograman lokal atau mungkin mereka sudah merasa cukup puas dengan membuat aplikasi yang bisa running pada saat windows diaktifkan.

Salah satu keuntungan aplikasi dibuat service adalah bisa running tanpa harus login ke windows dan tentunya tidak semua aplikasi harus dibuat service cukup aplikasi-aplikasi tertentu saja, contoh sample aplikasi yang ada disini.

Contoh-contoh source code yang mengklaim bisa membuat service dengan vb6 biasanya menggunakan fungsi-fungsi API yang buanyakkk dan seperti biasa kalo salah-salah bermain API bisa terbakar loh😀

Di artikel kali ini kita akan mencoba cara yang mudah/instan yaitu dengan menggunakan komponen NT Service Control Module.

Untuk sample program yang akan kita bahas nanti akan membutuhkan 2 parameter pada saat dijalankan yaitu :

  1. /i -> untuk menginstall/mendaftarkan aplikasi sebagai service
  2. /u -> untuk menguninstall/menghapus aplikasi dari service

Adapun fungsi yang digunakan untuk mendapatkan parameter yang dilewatkan ke aplikasi kita adalah :

  1. Command -> Variant
  2. Command$ -> String

Ke 2 fungsi diatas adalah fungsi yang sama hanya return valuenya saja yang beda, berikut contoh penggunaan fungsi tersebut :

Public Sub Main()
    Dim param As String

    param = Command$
    Select Case param
        Case "/i"
            'TODO : install sevice

        Case "/u"
            'TODO : uninstall service

        Case Else
            'parameter tidak dikenal
    End Select
End Sub

Komponen NT Service Control Module mempunya beberapa method, properties dan event yang memudahkan kita untuk membuat service :

Oke kita mulai saja langkah-langkah pembuatan service di vb dengan menggunakan komponen NT Service Control Module :
1. Buat project baru dan tambahkan komponen NT Service Control Module (komponen ini bisa Anda download pada bagian akhir artikel)

2. Masuk ke bagian editor code form kemudian tambahkan prosedur berikut :

Private Sub initNTService()
    On Error GoTo ServiceError

    stopService = False

    With NTService1
        .DisplayName = "Coding4ever NT Service"
        .ServiceName = "coding4everNTService"

        lblAnimasi.Caption = .DisplayName & " Loading"

        'Install the service
        If Command$ = "/i" Then

            'enable interaction with desktop
            .Interactive = True
            .StartMode = svcStartAutomatic

            'Install the program as an NT service
            If .Install Then
                'Save the TimerInterval Parameter in the Registry
                .SaveSetting "Parameters", "TimerInterval", "45"

                MsgBox .DisplayName & ": installed successfully"

            Else
                MsgBox .DisplayName & ": failed to install"
            End If

            End

        'Remove the Service Registry Keys and uninstall the service
        ElseIf Command$ = "/u" Then
            If .Uninstall Then
                MsgBox .DisplayName & ": uninstalled successfully"
            Else
                MsgBox .DisplayName & ": failed to uninstall"
            End If

            End

        'Invalid parameter
        ElseIf Command$ <> "" Then
            MsgBox "Invalid Parameter"
            End
        End If

        'Retrive the stored value for the timer interval
        tmrAnimasi.Interval = CInt(.GetSetting("Parameters", "TimerInterval", "45"))

        'enable Pause/Continue. Must be set before StartService
        'is called or in design mode
        .ControlsAccepted = svcCtrlPauseContinue

        'connect service to Windows NT services controller
        .StartService
    End With

    Exit Sub
ServiceError:
    Call NTService1.LogEvent(svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description)
End Sub

Selanjutnya kita tinggal panggil di event Form_Load :

Private Sub Form_Load()
    Call initNTService
End Sub

3. Langkah selanjutnya kita tinggal membuat kode untuk menghandle event-event berikut :

  • Continue
  • Control
  • Pause
  • Start
  • Stop
Private Sub NTService1_Continue(Success As Boolean)
    'Handle the continue service event
    On Error GoTo ServiceError

    tmrAnimasi.Enabled = True
    lblAnimasi.Caption = NTService1.DisplayName & " Running"
    Success = True

    NTService1.LogEvent svcEventInformation, svcMessageInfo, "Service continued"

    Exit Sub
ServiceError:
    NTService1.LogEvent svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description
End Sub

Private Sub NTService1_Control(ByVal mEvent As Long)
    'Take control of the service events
    On Error GoTo ServiceError

    lblAnimasi.Caption = NTService1.DisplayName & " Control signal " & CStr([mEvent])

    Exit Sub
ServiceError:
    NTService1.LogEvent svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description
End Sub

Private Sub NTService1_Pause(Success As Boolean)
    'Pause Event Request
    On Error GoTo ServiceError

    tmrAnimasi.Enabled = False
    lblAnimasi.Caption = NTService1.DisplayName & " Paused"
    NTService1.LogEvent svcEventError, svcMessageError, "Service paused"
    Success = True

    Exit Sub
ServiceError:
    NTService1.LogEvent svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description
End Sub

Private Sub NTService1_Start(Success As Boolean)
    'Start Event Request
    On Error GoTo ServiceError

    lblAnimasi.Caption = NTService1.DisplayName & " Running"
    Success = True

    Exit Sub
ServiceError:
    NTService1.LogEvent svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description
End Sub

Private Sub NTService1_Stop()
    'Stop and terminate the Service
    On Error GoTo ServiceError

    lblAnimasi.Caption = NTService1.DisplayName & " Stopped"
    stopService = True

    Unload Me

ServiceError:
    NTService1.LogEvent svcMessageError, svcEventError, "[" & Err.Number & "] " & Err.Description
End Sub

4. Terakhir adalah kode untuk menghandle jika di program service kita ditutup (event Form_Unload)

Private Sub Form_Unload(Cancel As Integer) 'Unload the Service
    If Not stopService Then
        If MsgBox("Are you sure you want to unload the service?..." & vbCrLf & "the service will be stopped", vbQuestion + vbYesNo, "Stop Service") = vbYes Then
            NTService1.stopService
            lblAnimasi.Caption = NTService1.DisplayName & " Stopping"

            Cancel = True

        Else
            Cancel = True
        End If
    End If
End Sub

Untuk menguji program yang kita buat berhasil atau tidak lakukan langkah-langkah berikut :

1. Compile project kita, misal hasil compile -> coding4everNTService.exe

2. Buat 2 buah file dengan ekstensi .bat atau .cmd, ke 2 file ini bertugas untuk menginstall/menguninstall aplikasi kita sebagai service
Isi file Install.bat

coding4everNTService /i

Isi file Uninstall.bat

coding4everNTService /u

Jalankan file Install.bat kemudian klik Start -> Run, ketik : services.msc

Setelah itu cek nama service yang kita buat misal Coding4ever NT Service

Jika tampil berarti kita sudah sukses membuat service dan klik link Start the service yang ada dipojok kiri atas untuk menjalankan service, jika berhasil status service kita akan menjadi Started

Oke mungkin itu saja yang bisa saya bahas pada artikel kali ini, sample program + komponen NT Service Control Module bisa Anda download disini.

Selamat mencoba🙂

Referensi :

  1. Running Visual Basic Applications as Windows NT Services
  2. How To Use NTSVC.OCX from Visual Basic
  1. February 18, 2010 at 5:43 am

    Salut…. tutorial om k4m4r82 selalu keren dan mudah di mengerti !
    Terus berkarya bro!!!

  2. February 18, 2010 at 6:27 am

    BRAJA :

    Salut…. tutorial om k4m4r82 selalu keren dan mudah di mengerti !
    Terus berkarya bro!!!

    Terima kasih mas braja atas komennya, jangan panggil om donk saya baru 17an thn loh:mrgreen:

  3. March 15, 2010 at 3:24 pm

    Assalamu’alaikum mas k4m4r82!
    Bener Mas Braja, kalau dilihat dari cara penulisan artikel & style pengkodean (penulisan variable, indent, kontanta, windows API, dll) mas k4m4r82 bukan seorang pemula, minimalnya beliau ini memiliki jam terbang 5 tahun ke atas. jadi kita tidak salah berguru yah. betulkan? oh yah mas, ditunggu koleksi source codenya (pastinya koleksi yang ada di komputer beliau ini bergiga-giga)he..
    thanks!

  4. March 15, 2010 at 4:41 pm

    Waalaikumussalam
    Bergiga-giga sih mas tapi karena jarang dibuka akhirnya jamuran😀 makanya lebih baik dibagi-bagi🙂.

    Lagiankan bahasa ini juga sudah mau punah😀 ditambah om mikocok juga udah G mau dukung lagi, jadi sebaiknya kita dokumentasikan aja biar generasi programmer selanjutnya tau klo dulu ada toh yang namanya bahasa pemrograman visual basic versi <= 6.

  5. June 29, 2010 at 11:50 pm

    Salut buat Mas Admin, artikel dan tutorial di web ini sangat membantu mencerdaskan para programmer baik pemula maupun yang sudah mahir. keep a good work and code4ever🙂.

    salam

    • June 30, 2010 at 1:45 am

      Tq mas udah mampir🙂.

  6. ivet
    July 2, 2010 at 1:05 pm

    punya code untuk menampilakn aplikasi pada saat windows dijalankan aplikasi yang kita bikin jadi run otomatis, aplikasi yang saya bikin adalah aplikasi biling warnet.. terima kasih

    • July 2, 2010 at 11:22 pm

      Mungkin cara yang paling mudah dengan mendaftarkan aplikasi kita di registry window, kita ambil salah satu lokasi yang bisa digunakan yaitu :

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run
      

      Berikut adalah kode untuk menyimpan informasi (bertipe String) di registry windows :

      Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
      Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, 
      
      ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
      Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
      
      Private Const REG_SZ = 1 ' Unicode nul terminated string
      Private Const HKEY_LOCAL_MACHINE = &H80000002
      
      Private Sub tulisRegistry(hKey As Long, strPath As String, strValue As String, strData As String)
          Dim ret As Long
          
          On Error Resume Next
          
          'Create a new key
          RegCreateKey hKey, strPath, ret
          'Save a string to the key
          RegSetValueEx ret, strValue, 0, REG_SZ, ByVal strData, Len(strData)
          'close the key
          RegCloseKey ret
      End Sub
      

      Selanjutnya tinggal panggil aja di method Main :

      Public Sub Main()
          Call tulisRegistry(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run", "MyBilling", App.Path & "\MyBilling.exe")
      End Sub
      

      Tentunya untuk melakukan ini user windows harus mempunyai akses untuk menulis ke registry windows.

      Atau cara lain yg lebih bijaksana, key ini bisa langsung diset pada saat instalasi aplikasi, berikut contoh skripnya berdasarkan Inno Setup

      [Registry]
      Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run"; ValueName: "MyBilling"; ValueType: String; ValueData: {app}\MyBilling.exe; Flags: uninsdeletevalue
      

      Klo menggunakan NSIS (Nullsoft Scriptable Install System), berikut contoh skripnya :

      Section "-Registry Windows"	
          WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run" "MyBilling" "$INSTDIR\MyBilling.exe"			
      SectionEnd
      

      Selamat mencoba🙂

  7. ivet
    July 2, 2010 at 1:08 pm

    terus pada saat waktu yang dipilih sudah habis punya codenya gak buat mengunci aplikasi yang terbuka yang tampil hanya aplikasi biling warnet nya saja…. terima kasih

    • July 2, 2010 at 11:27 pm

      Ada library yang bagus untuk menghandle masalah ini namanya Lock Windows Desktop.

      Kemudian untuk meningkatkan pengamanan bisa ditambahkan prosedur topMost (form selalu diatas) berikut :

      Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal Y As Long, ByVal cx As 
      
      Long, ByVal cy As Long, ByVal wFlags As Long) As Long
      Const HWND_TOPMOST = -1
      Const HWND_NOTOPMOST = -2
      Const SWP_NOSIZE = &H1
      Const SWP_NOMOVE = &H2
      
      Private Sub formTopMost(hWnd As Long)
          SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE
      End Sub
      
      Private Sub formNoTopMost(hWnd As Long)
          SetWindowPos hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE
      End Sub
      

      Selanjutnya tinggal panggil di event Load dan Unload form utama :

      Private Sub Form_Load()
          Call formTopMost(Me.hWnd) 'aktifkan fungsi topMost
      End Sub
      
      Private Sub Form_Unload(Cancel As Integer)
          Call formNoTopMost(Me.hWnd) 'non aktifkan fungsi topMost
      End Sub
      

      Selamat mencoba🙂

  8. tini
    July 22, 2010 at 1:35 am

    Knapa kbanyakn artikel yang membahas penggunaan event pada VB kurang ya,,??padahl bnyak yang ingin tau..salut buat yang punya artiktl ini. trima kasih sudah mau mmbagi ilmu.

    • July 22, 2010 at 5:35 am

      Jarang dibahas ya ?😀 kayaxnya klo di google udah banyak.
      Event di vb itu sebenarnya mirip dengan Listenner di java

  9. November 12, 2010 at 10:06 am

    Maju terus GAN !!!! ……

    • November 12, 2010 at 11:51 pm

      Siap !!! gan

  10. newbie
    December 8, 2010 at 4:32 pm

    gan,,,ane mo nanya, agak nyimpang dari pembahasan,,,maklum masih menitih ilmu,,,
    gini gan, gimana codingnya agar project vibi 6 (.exe) bisa dijalankan otomatis langsung dengan hak akses admin(win vista & win7),,,bantu ya gan,,,matur suwun,,,

    • December 9, 2010 at 12:50 am

      Bukannya cukup mengatur properties shortcutnya om, trus pilih Compatibility n aktifkan pilihan Run this program as an administrator.

      Lagian program si om ngapain aja, sampai2x harus pake hak akses admin baru bisa jalan?

  11. newbie
    December 9, 2010 at 2:40 am

    ia gan,,,tapi itu kan berlaku dalam 1 komputer ja,,,
    soalnya programku tak buat installer gan, jadi jika diinstal di komputer lain biar compatible karena memiliki hak akses admin!!!
    programku baca registry gan,,,bantu ya gan,,,

    • December 9, 2010 at 3:03 am

      Gini aja om klo installernya dibuat pake inno setup tambahkan aja skrip dibawah ini di section [Registry]. Ex :

      [Registry]
      Root: HKCU; Subkey: \Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers; ValueType: string; ValueName: Name; ValueData: {app}\nama_program.exe; Permissions: RUNASADMIN
      Root: HKLM; Subkey: \Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers; ValueType: string; ValueName: Name; ValueData: {app}\nama_program.exe; Permissions: WINXPSP2
      

      Selamat mencoba🙂

  12. newbie
    December 9, 2010 at 3:42 am

    itu artinya kita membuat REG_SW dan programku bisa jalan dengan hak akses RUNASADMIN ya????

    • December 9, 2010 at 3:48 am

      Harusnya gitu om, tapi belom sy coba😀
      Klo berhasil konfirm di sini ya

  13. newbie
    December 9, 2010 at 3:48 am

    q pake installer bawaan vibi gan,,,”package & deployment wizard”,,,

    • December 9, 2010 at 4:26 am

      Wedewww masih ada yang masih setia pake “Package & Deployment Wizard” ya😀

      Dengan BERAT hati om saya katakan klo “Package & Deployment Wizard” belom support untuk menulis ke registry windows, kecuali klo om mau ngerubah source “Package & Deployment Wizard” dan menambahkan secara manual untuk menulis ke registry windowsnya.

      Biasanya source “Package & Deployment Wizard” tersimpan di “C:\Program Files\Microsoft Visual Studio\VB98\Wizards\PDWizard\Setup1”

      Jadi mendingan pake Inno Setup atau NSIS aja om.

  14. newbie
    December 9, 2010 at 4:22 am

    kan q pake gini gan,,,

    Public Sub CreateKey(folder As String, value As String)
    Dim b As Object
    On Error Resume Next
    Set b = CreateObject(“wscript.shell”)
    b.regwrite folder, value, “REG_SZ”
    End Sub

    Private Sub Command9_Click()
    CreateKey “HKCU\Software\Microsoft\Windows NT\CurrentVersion\Appcompatflags\layers; ValueData: {app}\coba.exe;”, “RUNASADMIN”
    End Sub

    ada yang salah gak tuh???

    • December 9, 2010 at 4:30 am

      Ya salah benget om, contoh skrip diatas klo pake inno setup.

      Mendingan main-main kesini dulu, disitu ada sample nulis ke registry windows.

  15. newbie
    December 9, 2010 at 4:41 am

    hehehe🙂
    ok tak bacae dulu,,,pgn bljar byk,,,

    • December 9, 2010 at 5:58 am

      Oke om

  16. newbie
    December 9, 2010 at 5:12 am

    gan “{app}\” diatas tuh artinya apa ya???jangan diketawain ya, soale banyak tanya,,,hehehe

    • December 9, 2010 at 6:00 am

      Coba ke sini om, cek Content Constants

  17. newbie
    December 9, 2010 at 7:34 am

    oke gan udah bisa,,,dulu dah pernah pake inno tapi gak tau scriptnya & sekarang udah tau scriptnya,,,makasih atas pencerahan ilmunya,,,kapan2 tanya lagi ya gan,,,

    • December 9, 2010 at 7:50 am

      He he he sy kira tadi kapan2 mau ditraktir😀

  18. newbie
    December 9, 2010 at 9:53 am

    ho ho ho ho boleh, boleh, boleh,,,,,😛

    mau nanya lagi donk gan,,,😀
    kan q punya report(data dynamics activereports2.0), nah pada saat dirun q pengen direport tuh bisa muncul nomer urutnya,,,,gmn gan???
    bantu lagi ya gan,,,

    • December 9, 2010 at 10:07 am

      Langsung meluncur kesini aja om.

  19. newbie
    December 9, 2010 at 10:24 am

    langsung dicoba, langsung sukses, langsung lancar,,,mantap jaya gan,,,gak jadi pindah ke crystal deh kalu gitu,,,😀
    gak rugi ngeblog disini,,,,ckckckc,,,

    Just coding… coding… and coding… because coding should be fun and 4ever fun😀

    • December 9, 2010 at 10:35 am

      Ha ha ha satu lagi deh korbannya coding, tunggu beberapa tahun lagi om akan menyesal kenapa memilih profesi ini😛

  20. Tejos
    May 31, 2011 at 11:19 am

    Untuk koding Registry Inno Setupnya di atas di Win 7 bisa gak ya gan…?

    • May 31, 2011 at 11:23 am

      Sama aja om, enggak ada yg beda

  21. November 8, 2011 at 1:51 am

    Manntapp bnr dah mas bro ini..🙂 aq kmrn googling2 mslh sms gateway, trs nemu blog ini. Alhamdulillah skrng udh jalan, tinggal buat kode aktivasi sm package setupnya.., tar klo ada kendala dibantu y mas bro..🙂

    • November 8, 2011 at 8:41 am

      Oke deh om selamat dan sukses deh buat projectnya🙂

  22. omen
    February 26, 2012 at 11:58 pm

    salam Kenal om,.,.,

    saya baru belajar bikin sistem informasi memakai vb 6 dan crystal report,,,

    saya mau menayakan, bagai mana aplikasi yang sudah siap itu bisa di pasang di beberapa komputer tanpa ada vb 6 dan crystal report di komputer tersebut,.,.??
    Ctt: saya memakai database mysql…
    yang telah saya coba,,saya membuat setup nya memakai innosetup 5
    Mohon bantuan nya om,.,.
    makasih sebelum nya.,.

    • February 27, 2012 at 5:25 am

      Ya harus dibuat file setupannya dan sy udah bahas habis2x-an om disini coba cek komentar #319

  23. titus
    October 13, 2012 at 12:06 am

    mas admin…
    saya berharap jadii programer kaya mas admin,,,berlatih habis-habis an
    mohon bantuan dan kerjasama dari mas admin

    saya masih perlu banyak belajarr
    segala jenis coding, bagi-bagi source code nya yah mass..
    =)
    makasih banyakk……

    klo bisa posting trus untuk source code” yg trbaru mas..
    saya terbantu bgt…

  24. titus
    October 13, 2012 at 12:12 am

    mass..
    minta tolong postingin coding standar,
    aplikasi apa jj…yang penting pake event keypress,(keyascii)
    me-load

    saya masih amatir mass
    =P

    MAKASIH MASS ADMIN…

  25. mariza
    August 1, 2013 at 11:51 am

    Assalamu’alaykum
    mas kalau di jalankan di w7 tidak bisa…
    ketika saya install lewat file.bat keluar pesan failed

    gimana ya

    • August 1, 2013 at 11:55 am

      Komponen NT Service Control Module, memang g disupport di win 7 om

      • mariza
        August 1, 2013 at 12:02 pm

        ok… ada solusi tidak jika ingin buat services di w7?

        • August 1, 2013 at 12:14 pm

          Ya pake VB .NET atau C#

          • mariza
            August 1, 2013 at 12:22 pm

            terima kasih…

            • August 1, 2013 at 4:48 pm

              Yuph, sama2x

  1. April 16, 2014 at 9:12 am
Comments are closed.
%d bloggers like this: