C++Builder 程序员博客
20 Aug
我写了一个服务程序,这个服务很简单,就是开一个线程监听,代码如下:
//—————————————————————————
void __fastcall TService1::ServiceExecute(TService *Sender)
{
UINT m_Port=33333;
m_ListenThread=new TListenThread(m_Port,FALSE,NULL );
while(!Terminated)
{
Sleep(100);
ServiceThread->ProcessRequests(false);
}
}
只有execute里面有代码。
这个服务我使用/install能安装到机器上,并能够很好的运行。
但是我另外写了一个程序,是把这个exe文件安装到机器上的,并不是用/install参数,而是使用函数:
hSCM=OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
hService = ::CreateService( hSCM,
szServiceName,
szServiceName,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
dest.c_str(), NULL, NULL,
"",
NULL,
NULL);
::CloseServiceHandle(hService);
::CloseServiceHandle(hSCM);
这个函数可以把服务安装上去,但是无法启动运行,在控制面板的服务里也没有办法启动,每次点启动的时候,进度条要等很长时间,然后报一个错误。
请问该如何解决呢?
你用/install安装后,会在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services多出一个项,照着那个项写注册表就行了
ok,我找到问题所在了,hService = ::CreateService( hSCM,
szServiceName,
szServiceName, 这里的2个参数一定要按照服务里的属性名称来写,不能自己瞎写,呵呵。