win/zz_nt_service.h

Go to the documentation of this file.
00001 /* libzzwin
00002  *
00003  * This program is distributed under the GNU General Public License, version 2.
00004  * A copy of this license is included with this source.
00005  *
00006  * Copyright 2000-2006, Toni Thomsson <toni@tonjac.org> 
00007 */
00008 
00009 #ifndef zz_nt_service_h
00010 #define zz_nt_service_h
00011 
00012 #include <winsock2.h>
00013 #include <zz_string.h>
00014 #include <zz_log.h>
00015 #include <zz_win_exception.h>
00016 #include <windows.h>
00017 
00018 /*
00019         Description:
00020         Basklass för NT-tjänster
00021 
00022         Remarks:
00023         Använd ej direkt: subklassa !
00024 
00025         Author: 
00026         Toni Thomsson, toni@tonjac.org
00027 
00028         Library:
00029         libzzwin.lib
00030 
00031         Platform:
00032         win32
00033 */
00034 class ZZ_API CzzNTService
00035 {
00036 public:
00037 
00038         /* 
00039                 Description:
00040                 Skapar ett NT-tjänst objekt
00041 
00042                 Remarks:
00043                 Använd ej direkt: subklassa !
00044 
00045                 Throws:
00046                 CzzWinException
00047 
00048                 Example:
00049                 #include "myservice.h"
00050 
00051                 void _CRTAPI1 main( int argc, char** argv )
00052                 {
00053                          try
00054                          {
00055                                 CMyService my( "myservice", "myservice", "My service", "" );
00056 
00057                                 // Switch args...
00058                                 ...
00059 
00060                                 // Install service
00061                                 my.Install();
00062                                 return;
00063 
00064                                 ...
00065 
00066                                 // Remove service
00067                                 my.Remove();
00068                                 return;
00069 
00070                                 ...
00071 
00072                                 // Debug
00073                                 my.Debug( argc, argv );
00074                                 return;
00075 
00076                                 ...
00077 
00078                                 // Start service
00079                                 my.Start();
00080 
00081                         }
00082                         catch( CzzException& e )
00083                         {
00084                                 ...
00085                         }
00086 
00087                 }       
00088         */
00089         CzzNTService( const char* appname,              // IN, applikationsnamn
00090                                         const char* svc,                // IN, tjänstnamn
00091                                         const char* args,               // IN, argument
00092                                         const char* display,    // IN, beskrivnings text
00093                                         const char* dep,                // IN, beroendesträng, se SDK
00094                                         const char* descr,              // IN, beskrivningssträng
00095                                         DWORD starttype );
00096 
00097         CzzNTService( const char* appname,              // IN, applikationsnamn
00098                                         const char* svc,                // IN, tjänstnamn
00099                                         const char* args,               // IN, argument
00100                                         const char* display,    // IN, beskrivnings text
00101                                         const char* dep,                // IN, beroendesträng, se SDK
00102                                         const char* descr               // IN, beskrivningssträng
00103                                         );
00104 
00105         CzzNTService( const char* appname,              // IN, applikationsnamn
00106                                         const char* svc,                // IN, tjänstnamn
00107                                         const char* args,               // IN, argument
00108                                         const char* display,    // IN, beskrivnings text
00109                                         const char* dep                 // IN, beroendesträng, se SDK
00110                                         );
00111 
00112         virtual ~CzzNTService();
00113 
00114         /*
00115                 Description:
00116                 Installerar tjänsten i windows registry
00117 
00118                 Remarks:
00119                 Överlagringsbar
00120 
00121                 Throws:
00122                 CzzWinException
00123         */
00124         virtual void Install( void );
00125 
00126         /*
00127                 Description:
00128                 Tar bort tjänsten från windows registry
00129 
00130                 Remarks:
00131                 Överlagringsbar
00132 
00133                 Throws:
00134                 CzzWinException
00135         */
00136         virtual void Remove( void );
00137 
00138         /*
00139                 Description:
00140                 Startar i "debug-läge" vanlig konsol
00141 
00142                 Remarks:
00143                 Överlagringsbar
00144 
00145                 Throws:
00146                 CzzWinException
00147         */
00148         virtual void Debug( int argc,           // IN, antal argument
00149                                                 char** argv             // IN, argumentlista
00150                                                 );
00151 
00152         /*
00153                 Description:
00154                 Startar tjänsten
00155 
00156                 Remarks:
00157                 Överlagringsbar
00158 
00159                 Throws:
00160                 CzzWinException
00161         */
00162         virtual void Start( void );
00163 
00164         // Description: Tjänstnamn
00165         CzzString& GetServiceName( void ) { return m_ServiceName; };
00166         
00167         // Description: Applikationsnamn
00168         CzzString& GetAppName( void ) { return m_AppName; };
00169 
00170         // Description: Tjänstestatus, se SDK
00171         SERVICE_STATUS& GetStatus( void ) { return m_Status; };
00172 
00173         // Description: Logg
00174         CzzLog& GetLog( void ) { return m_Log; };
00175                 
00176         /*
00177                 Description:
00178                 Anropas när tjänsten startas
00179 
00180                 Remarks:
00181                 Överlagringsbar
00182         */
00183         virtual void OnStart( int argc,                 // IN, antal argument
00184                                                         char** argv             // IN, argumentlista
00185                                                         );
00186 
00187         /*
00188                 Description:
00189                 Anropas när tjänsten stoppas
00190 
00191                 Remarks:
00192                 Överlagringsbar
00193         */
00194         virtual void OnStop( void );
00195 
00196         // Description: Rapporterar status till SCM
00197         void ReportStatus( DWORD state, DWORD exitcode, DWORD waithint );
00198 
00199         // Description: Registrerar tjänsten
00200         void Register( void );
00201 
00202 protected:
00203         
00204         void Init( void );
00205         void Exit( void );
00206 
00207         SERVICE_STATUS m_Status;
00208         SERVICE_STATUS_HANDLE m_Handle;
00209         CzzLog m_Log;
00210         CzzString m_AppName;
00211         CzzString m_ServiceName;
00212         CzzString m_Args;
00213         CzzString m_DisplayName;
00214         CzzString m_Description;
00215         CzzString m_Dependencies;
00216         bool m_Debug;
00217         DWORD m_Error;
00218         DWORD m_CheckPoint;
00219         DWORD m_StartType;      
00220         HANDLE m_StopEvent;
00221 
00222 private:
00223         
00224         static CzzNTService* m_pThis;
00225 
00226         static BOOL WINAPI ConsoleHandler( DWORD type );
00227         static VOID WINAPI ControlHandler( DWORD code );
00228         static void WINAPI Entrypoint( DWORD argc, LPSTR* argv );
00229 };
00230 
00231 #endif // zz_nt_service_h
00232 

Generated on Thu Sep 21 21:45:42 2006 for tonjac.org MINI/C++ library by  doxygen 1.4.6-NO