/* libzzwin
*
* This program is distributed under the GNU General Public License, version 2.
* A copy of this license is included with this source.
*
* Copyright 2000-2006, Toni Thomsson <toni@tonjac.org>
*/
#ifndef zz_nt_service_h
#define zz_nt_service_h
#include <winsock2.h>
#include <zz_string.h>
#include <zz_log.h>
#include <zz_win_exception.h>
#include <windows.h>
/*
Description:
Basklass för NT-tjänster
Remarks:
Använd ej direkt: subklassa !
Author:
Toni Thomsson, toni@tonjac.org
Library:
libzzwin.lib
Platform:
win32
*/
class ZZ_API CzzNTService
{
public:
/*
Description:
Skapar ett NT-tjänst objekt
Remarks:
Använd ej direkt: subklassa !
Throws:
CzzWinException
Example:
#include "myservice.h"
void _CRTAPI1 main( int argc, char** argv )
{
try
{
CMyService my( "myservice", "myservice", "My service", "" );
// Switch args...
...
// Install service
my.Install();
return;
...
// Remove service
my.Remove();
return;
...
// Debug
my.Debug( argc, argv );
return;
...
// Start service
my.Start();
}
catch( CzzException& e )
{
...
}
}
*/
CzzNTService( const char* appname, // IN, applikationsnamn
const char* svc, // IN, tjänstnamn
const char* args, // IN, argument
const char* display, // IN, beskrivnings text
const char* dep, // IN, beroendesträng, se SDK
const char* descr, // IN, beskrivningssträng
DWORD starttype );
CzzNTService( const char* appname, // IN, applikationsnamn
const char* svc, // IN, tjänstnamn
const char* args, // IN, argument
const char* display, // IN, beskrivnings text
const char* dep, // IN, beroendesträng, se SDK
const char* descr // IN, beskrivningssträng
);
CzzNTService( const char* appname, // IN, applikationsnamn
const char* svc, // IN, tjänstnamn
const char* args, // IN, argument
const char* display, // IN, beskrivnings text
const char* dep // IN, beroendesträng, se SDK
);
virtual ~CzzNTService();
/*
Description:
Installerar tjänsten i windows registry
Remarks:
Överlagringsbar
Throws:
CzzWinException
*/
virtual void Install( void );
/*
Description:
Tar bort tjänsten från windows registry
Remarks:
Överlagringsbar
Throws:
CzzWinException
*/
virtual void Remove( void );
/*
Description:
Startar i "debug-läge" vanlig konsol
Remarks:
Överlagringsbar
Throws:
CzzWinException
*/
virtual void Debug( int argc, // IN, antal argument
char** argv // IN, argumentlista
);
/*
Description:
Startar tjänsten
Remarks:
Överlagringsbar
Throws:
CzzWinException
*/
virtual void Start( void );
// Description: Tjänstnamn
CzzString& GetServiceName( void ) { return m_ServiceName; };
// Description: Applikationsnamn
CzzString& GetAppName( void ) { return m_AppName; };
// Description: Tjänstestatus, se SDK
SERVICE_STATUS& GetStatus( void ) { return m_Status; };
// Description: Logg
CzzLog& GetLog( void ) { return m_Log; };
/*
Description:
Anropas när tjänsten startas
Remarks:
Överlagringsbar
*/
virtual void OnStart( int argc, // IN, antal argument
char** argv // IN, argumentlista
);
/*
Description:
Anropas när tjänsten stoppas
Remarks:
Överlagringsbar
*/
virtual void OnStop( void );
// Description: Rapporterar status till SCM
void ReportStatus( DWORD state, DWORD exitcode, DWORD waithint );
// Description: Registrerar tjänsten
void Register( void );
protected:
void Init( void );
void Exit( void );
SERVICE_STATUS m_Status;
SERVICE_STATUS_HANDLE m_Handle;
CzzLog m_Log;
CzzString m_AppName;
CzzString m_ServiceName;
CzzString m_Args;
CzzString m_DisplayName;
CzzString m_Description;
CzzString m_Dependencies;
bool m_Debug;
DWORD m_Error;
DWORD m_CheckPoint;
DWORD m_StartType;
HANDLE m_StopEvent;
private:
static CzzNTService* m_pThis;
static BOOL WINAPI ConsoleHandler( DWORD type );
static VOID WINAPI ControlHandler( DWORD code );
static void WINAPI Entrypoint( DWORD argc, LPSTR* argv );
};
#endif // zz_nt_service_h