Writing SERVICES with MFC, Can it be Done, Maybe?
wayne.dengel@octel.com
Monday, July 29, 1996
Environment: VC4.0 and NT4.0 Beta2
Hello,
I have an app that uses a class derived from CWinThread. I want to
run this class as an MFC Service. Heres what I did.
1: Created an MFC Dialog App.
2: Stripped the Dialog from the App.
3: In InitInstance in theApp I created a CWnd (To satisfy CWinThread)
4: In this CWnd, I am creating and running my CWinThread Class
5: After this, still in init, I am starting this app as a service.
Is this possible?
I created the CWnd in the app to satisfy CWinThread, because, I think
that CWinThread need a parent Wnd to start. Is this TRUE?
Is there any other way to do this and make it work. I had it running
for a while, but is wasn't right.
Thanks for any advice.
Wayne
PS Here is an snippet from the code. I know you need more but, but I
don't want to take up too much space.
BOOL CIVRServiceApp::InitInstance()
{ OSVERSIONINFO version; //OS Version info struct
pWnd=(CMainWnd *) new CMainWnd; // Create MAIN wnd
Enable3dControls();
pWnd->Create(NULL,"Ocapi Frame"); //OBJECT Wnd
m_pMainWnd=pWnd;
version.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&version); // Get the OS Type & Info
if(version.dwPlatformId==VER_PLATFORM_WIN32_NT)
b_NT=TRUE;
else
b_NT=FALSE;
if(b_NT){
dispatchTable[0]=new SERVICE_TABLE_ENTRY;
dispatchTable[1]=new SERVICE_TABLE_ENTRY;
dispatchTable[0]->lpServiceName=TEXT(SZSERVICENAME);
dispatchTable[0]->lpServiceProc=service_main;
dispatchTable[1]->lpServiceName=NULL;
dispatchTable[1]->lpServiceProc=NULL;
CString str;
str.Format("%s",m_lpCmdLine);
if(str.Find("install")>-1){
CmdInstallService(); // Call INSTALL routine
return FALSE; // Tell APP we are done
}else if(str.Find("remove")>-1){
CmdRemoveService(); // Call REMOVE routine
return FALSE; // Tell APP we are done
}
}
if(!StartServiceCtrlDispatcher((*dispatchTable))){
AddToMessageLog(TEXT("StartService FAILED.")); return
FALSE;
}
return TRUE;
}
Unfortunatly, the StartServiceCtrlDispatcher, does NOT return until
the Control thread is DONE. So I wanted to return but NOT end the
thread. Any Ideas
Luca Orlandi -- Luca.Orlandi@inferentia.it
Friday, August 02, 1996
On luned=EC 29 luglio 1996 17.56, wayne.dengel@octel.com wrote:
> Environment: VC4.0 and NT4.0 Beta2
Take a look at Sam Blackburn's WFC32 classes =
http://ourworld.compuserve.com/homepages/Sam_Blackburn/wfc.htm ther's a =
CService class.
| Вернуться в корень Архива
|