|
|
/************************************************************************************************
Copyright (c) 2001 Microsoft Corporation
Module Name: Pop3SvcMain.cpp Abstract: Defines the entry-point for the Pop3Svc Service. Author: Luciano Passuello (lucianop), 01/25/2001 Modified from original code from IMB Service
************************************************************************************************/
#include "stdafx.h"
#include "ServiceSetup.h"
#include "Resource.h"
// What is the executable being run for?
enum ServiceMode {SERVICE_RUN, SERVICE_INSTALL, SERVICE_REMOVE};
// prototypes
ServiceMode GetServiceMode(); void RunService(LPCTSTR tszServiceName, LPCTSTR tszDisplayName); void InstallService(LPCTSTR tszServiceName, LPCTSTR tszDisplayName, LPCTSTR tszDescription); void RemoveService(LPCTSTR tszServiceName, LPCTSTR tszDisplayName);
/************************************************************************************************
Function: WinMain, global Description: Entry-point for the application. Arguments: See WinMain documentation. History: 01/26/2001 - created, Luciano Passuello (lucianop). ************************************************************************************************/ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int /*nCmdShow*/) { // load necessary data about the service
TCHAR tszDescription[nMaxServiceDescLen+1]; TCHAR tszDisplayName[nMaxServiceDescLen+1]; if(0 == LoadString(hInstance, IDS_DESCRIPTION, tszDescription, nMaxServiceDescLen)) { return 1; } if(0 == LoadString(hInstance, IDS_DISPLAYNAME, tszDisplayName, nMaxServiceDescLen)) { return 1; } // parse the command line and identify what action to perform
ServiceMode sm = GetServiceMode();
switch(sm) { case SERVICE_RUN: RunService(POP3_SERVICE_NAME, tszDisplayName); break; case SERVICE_INSTALL: InstallService(POP3_SERVICE_NAME, tszDisplayName, tszDescription); break; case SERVICE_REMOVE: RemoveService(POP3_SERVICE_NAME, tszDisplayName); break; }
return 0; }
/************************************************************************************************
Function: GetServiceMode, global Synopsis: Parses the command line and returns the running mode for the service. Notes: History: 01/26/2001 - created, Luciano Passuello (lucianop). ************************************************************************************************/ ServiceMode GetServiceMode() { // gets the command line, parses it and returns what is to be done
TCHAR *tszCommandLine = GetCommandLine(); CharLowerBuff(tszCommandLine, _tcslen(tszCommandLine));
if(_tcsstr(tszCommandLine, _T("-install"))) { return SERVICE_INSTALL; } else if(_tcsstr(tszCommandLine, _T("-remove"))) { return SERVICE_REMOVE; } else { // unrecognized command line parameters translate to "RUN", too.
return SERVICE_RUN; } }
/************************************************************************************************
Function: RunService, global Description: Main processing when the service is being executed in running mode. Arguments: [tszServiceName] - unique short name of the service [tszDisplayName] - service name as it will appear to users in the SCM. Notes: History: 01/26/2001 - created, Luciano Passuello (lucianop). ************************************************************************************************/ void RunService(LPCTSTR tszServiceName, LPCTSTR tszDisplayName) { ASSERT(!(NULL == tszServiceName)); ASSERT(!(NULL == tszDisplayName)); // creates the service-wrapper class
CPop3Svc POP3SVC(tszServiceName, tszDisplayName, SERVICE_WIN32_SHARE_PROCESS );
// initializes the control handlers with the SCM and starts the processing threads
// See CService design
BEGIN_SERVICE_MAP SERVICE_MAP_ENTRY(CPop3Svc, POP3SVC) END_SERVICE_MAP
}
/************************************************************************************************
Function: InstallService, global Description: Main processing when the service is running in install mode. Arguments: [tszServiceName] - unique short name of the service [tszDisplayName] - service name as it will appear to users in the SCM. [tszDescription] - long description of the service (available in the SCM) Notes: History: 01/26/2001 Luciano Passuello (lucianop) Created. ************************************************************************************************/ void InstallService(LPCTSTR tszServiceName, LPCTSTR tszDisplayName, LPCTSTR tszDescription) { CServiceSetup cs(tszServiceName, tszDisplayName); cs.Install(tszDescription); }
/************************************************************************************************
Function: WinMain, global Description: Main processing when the service is running in remove mode. Arguments: [tszServiceName] - unique short name of the service [tszDisplayName] - service name as it will appear to users in the SCM. Notes: History: 01/26/2001 Luciano Passuello (lucianop) Created. ************************************************************************************************/ void RemoveService(LPCTSTR tszServiceName, LPCTSTR tszDisplayName) { CServiceSetup cs(tszServiceName, tszDisplayName);
if(cs.IsInstalled()) { cs.Remove(true); } }
|