VC Win7 系统创设服务启动失败

VC Win7 系统创建服务启动失败
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>

TCHAR szServiceName[] = TEXT("MyTestService");

DWORD dwThreadID;

//HANDLE hEvent = INVALID_HANDLE_VALUE;

SERVICE_STATUS status;

SERVICE_STATUS_HANDLE hServiceStatus;

SERVICE_STATUS_HANDLE gSvcStatusHandle;

//初始化相关结构
void
Init(
 VOID
 );
//
void 
WINAPI 
ServiceMain(
VOID
);

void 
LogEvent( 
LPCTSTR pFormat, 
...
);
//安装服务
BOOL 
InstallService(
VOID
);
//判断服务是否已安装
BOOL 
IsServiceInstalled(
VOID
);
//开启服务
BOOL
ServiceCtrlStart(
VOID
);
//停止服务
BOOL
ServiceCtrlStop(
VOID
);

VOID
WINAPI
ServiceStrl(
DWORD dwOpcode
);

//删除服务
BOOL
UninstanllService(
VOID
);

BOOL 
DoTask(
VOID
);

int main( int argc, char* argv[] )
{
Init();

BOOL bRet = FALSE;

SERVICE_TABLE_ENTRY st[] =
{
{ szServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain },
{ NULL, NULL }
};

do 
{
bRet = InstallService();
if ( !bRet )
{
break;
}

bRet = StartServiceCtrlDispatcher( st );
if ( !bRet)
{
DWORD dwError = GetLastError();
break;
}

bRet = ServiceCtrlStart( );
if ( !bRet )
{
break;
}

bRet = UninstanllService();
if ( !bRet )
{
break;
}

} while( FALSE );

return 0;
}

//初始化相关结构
void Init()
{
hServiceStatus = NULL;
status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
status.dwCurrentState = SERVICE_STOPPED;
status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
status.dwWin32ExitCode = 0;
status.dwServiceSpecificExitCode = 0;
status.dwCheckPoint = 0;
status.dwWaitHint = 0;
}


//服务主线程函数,既用户选择开启服务时调用的函数
void WINAPI ServiceMain()
{
MessageBox( NULL, TEXT("zou ServiceMain"), NULL, MB_OK );
        hServiceStatus = RegisterServiceCtrlHandler( TEXT("MyTestService"), ServiceStrl );
if ( NULL == hServiceStatus )
{
MessageBox( NULL, (const char *)hServiceStatus, NULL, MB_OK );
}

status.dwCurrentState = SERVICE_START_PENDING;

status.dwControlsAccepted = SERVICE_ACCEPT_STOP;

//LogEvent( TEXT("ServiceMain") );

while ( TRUE )
{
DoTask();
Sleep(5000);
break;
}

if ( NULL == hServiceStatus )
{
//LogEvent( TEXT("Handler not installed") );
return;
}

//SetServiceStatus( hServiceStatus, &status );
//如下代码可以为启动服务前的准备工作
//hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
//if ( hEvent == NULL )
//{
//status.dwCurrentState = SERVICE_STOPPED;

//BOOL bRet = SetServiceStatus( hServiceStatus, &status );