可以实现,不过比较复杂
void WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv)
{
    // register our service control handler:
    ServiceStatusHandle = RegisterServiceCtrlHandler( TEXT(SZSERVICENAME), service_ctrl);    if (ServiceStatusHandle)
{
// SERVICE_STATUS members that don't change in example
ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
ServiceStatus.dwServiceSpecificExitCode = 0;

// report the status to the service control manager.
if ( ReportStatusToSCMgr( SERVICE_START_PENDING,  NO_ERROR,  3000) ) 
{
service_start( dwArgc, lpszArgv );//你的服务在这个函数里实现即可
}
}
    // try to report the stopped status to the service control manager.
    if (ServiceStatusHandle)
        (void)ReportStatusToSCMgr(SERVICE_STOPPED, dwErr, 0);    return;
}
void main(int argc, char **argv)
{
    SERVICE_TABLE_ENTRY dispatchTable[] =
    {
        { TEXT(SZSERVICENAME), (LPSERVICE_MAIN_FUNCTION)service_main },
        { NULL, NULL }//表示服务分派表结束
    };
    printf("\nStartServiceCtrlDispatcher being called.\n" );
    printf("This may take several seconds.  Please wait...\n" );
    //向服务控制管理器添加一个服务
    if (!StartServiceCtrlDispatcher(dispatchTable))
    {
  AddToMessageLog(TEXT("StartServiceCtrlDispatcher failed!"));
     }
}