? diffs.txt ? src/cpp/launcher/build ? src/cpp/launcher/deploy.bat ? src/cpp/launcher/q.bat Index: src/cpp/launcher/NativeInvokerService.c =================================================================== RCS file: /cvs/glassfish/appserv-native/src/cpp/launcher/NativeInvokerService.c,v retrieving revision 1.2 diff -u -r1.2 NativeInvokerService.c --- src/cpp/launcher/NativeInvokerService.c 25 Dec 2005 17:52:06 -0000 1.2 +++ src/cpp/launcher/NativeInvokerService.c 5 Mar 2007 19:11:38 -0000 @@ -48,8 +48,11 @@ DWORD g_status = 0; char *g_executableStartScript=NULL, *g_executableStopScript=NULL; int _debugProg=0; +PROCESS_INFORMATION piProcInfo; +BOOL isVerbose = FALSE; int main(int argc, char *argv[]) { + SERVICE_TABLE_ENTRY svcTable[] = { @@ -57,6 +60,7 @@ //{ _T(argv[3]), (LPSERVICE_MAIN_FUNCTION)ServiceMain }, { NULL, NULL } }; + ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) ); // need at least 3 args if (argc < 3) { @@ -71,31 +75,26 @@ g_executableStartScript = argv[1]; g_executableStopScript = argv[2]; + if(strstr(g_executableStartScript, "--verbose")) + isVerbose = TRUE; + else + isVerbose = FALSE; + if(!StartServiceCtrlDispatcher(svcTable)) ErrorPrinter(_T("StartServiceCtrlDispatcher"), GetLastError()); return 0; } -/* -int main(int argc, char *argv[]) { - - PrintEvent(_T("alternate main start ...")); - // check args came in ??? - g_executableStartScript = argv[1]; - g_executableStopScript = argv[2]; - - executeCommand(g_executableStartScript); - return 0; -} -*/ - void WINAPI ServiceMain(DWORD argc, LPTSTR* argv) { DWORD dwWait, dwError=NO_ERROR, dwRet=0; int iRet=0, i=0; TCHAR serviceStopEvent[300]; + ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) ); + + // SCM provides ServiceID as 1st argument, save for later use memset(g_ServiceName, 0, sizeof(g_ServiceName)); strcpy(g_ServiceName, argv[0]); @@ -132,6 +131,12 @@ PrintEvent(_T("Got the Stop or shutdown Event")); } + if(isVerbose == TRUE) + { + CloseHandle(piProcInfo.hProcess); + CloseHandle(piProcInfo.hThread); + } + // Let the SCM know I am stopping SendStatus(SERVICE_STOP_PENDING, 1, 120000, 0, NO_ERROR, 0); @@ -199,14 +204,10 @@ */ int executeCommand(char *scriptFile) { - PROCESS_INFORMATION piProcInfo; STARTUPINFO siStartInfo; BOOL bFuncRetn = FALSE; DWORD dwRet; - // Set up members of the PROCESS_INFORMATION structure. - ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) ); - // Set up members of the STARTUPINFO structure. ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) ); siStartInfo.cb = sizeof(STARTUPINFO); @@ -231,18 +232,20 @@ printf("\nprocess failure %x\n", GetLastError()); PrintEvent(_T("ProcessCreate Failed")); ErrorPrinter(_T("executeCommand"), GetLastError()); + return 1; + } else if(isVerbose == FALSE) { + // Wait until process exits. + WaitForSingleObject( piProcInfo.hProcess, INFINITE ); + + GetExitCodeProcess(piProcInfo.hProcess, &dwRet); + printf("\nReturn code for start process - %d", dwRet); + + CloseHandle(piProcInfo.hProcess); + CloseHandle(piProcInfo.hThread); + return 0; } else { - // Wait until process exits. - WaitForSingleObject( piProcInfo.hProcess, INFINITE ); - - GetExitCodeProcess(piProcInfo.hProcess, &dwRet); - printf("\nReturn code for start process - %d", dwRet); - - CloseHandle(piProcInfo.hProcess); - CloseHandle(piProcInfo.hThread); + return 0; } - - return dwRet; }