我写了一个服务程序,这个服务很简单,就是开一个线程监听,代码如下:
//—————————————————————————
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个参数一定要按照服务里的属性名称来写,不能自己瞎写,呵呵。