Re: NT Service with ADO
Na , Kurt <junk@junk.com> escreveu:
Without seeing any code it's hard to say, are you trying to open a
connection in your startup routine? Did you call CoInitialize?
Yes, I'm calling the CoInitialize for each thread that I start.
This is my startup routine..
----- begin
void ServiceMain(DWORD /*dwArgc*/, LPTSTR* /*lpszArgv*/)
{
WSAStartup(MAKEWORD(1,1), &m_wsData); // Fill in WSA info
if (m_wsData.wVersion==0)
{
ReportStatusToSCM(SERVICE_STOPPED, ::GetLastError(), 0, 1, 0);
return;
}
//register our control handler
RegisterCtrlHandler();
//Pretend that starting up takes some time
ReportStatusToSCM(SERVICE_START_PENDING, NO_ERROR, 0, 1, 0);
ReportStatusToSCM(SERVICE_RUNNING, NO_ERROR, 0, 1, 0);
//Report to the event log that the service has started successfully
m_EventLogSource.Report(EVENTLOG_INFORMATION_TYPE,
CNTS_MSG_SERVICE_STARTED, m_sDisplayName);
AfxBeginThread(ThreadWork, this, THREAD_PRIORITY_BELOW_NORMAL);
//The tight loop which constitutes the service
while (!GetWantStop())
{
//As a demo, we just do a message beep
CSocketListener lstnr;
lstnr.Listen(this);
Sleep(500);
}
//Pretend that closing down takes some time
ReportStatusToSCM(SERVICE_STOP_PENDING, NO_ERROR, 0, 1, 0);
Sleep(1000);
ReportStatusToSCM(SERVICE_STOPPED, NO_ERROR, 0, 1, 0);
//Report to the event log that the service has stopped successfully
m_EventLogSource.Report(EVENTLOG_INFORMATION_TYPE,
CNTS_MSG_SERVICE_STOPPED, m_sDisplayName);
}
---- end
The thread pointed by ThreadWork, is the one that actualy uses the ADO
Connection; as you can also see, there is a cycle with a socket listener,
for some user interface for special tasks.
I hope it is enough...