可以实现,不过比较复杂
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!"));
}
}
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!"));
}
}
1 建立个windows服务程序
2 windows服务程序调用JVM
3 JVM调用你的java程序