2 * PROJECT: ReactOS Services
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/mscutils/servman/start.c
5 * PURPOSE: Start a service
6 * COPYRIGHT: Copyright 2005-2007 Ged Murphy <gedmurphy@reactos.org>
13 DoStartService(PMAIN_WND_INFO Info
,
18 SERVICE_STATUS_PROCESS ServiceStatus
;
19 DWORD BytesNeeded
= 0;
23 hSCManager
= OpenSCManager(NULL
,
25 SC_MANAGER_ALL_ACCESS
);
26 if (hSCManager
!= NULL
)
28 hSc
= OpenService(hSCManager
,
29 Info
->pCurrentService
->lpServiceName
,
39 if (QueryServiceStatusEx(hSc
,
40 SC_STATUS_PROCESS_INFO
,
41 (LPBYTE
)&ServiceStatus
,
42 sizeof(SERVICE_STATUS_PROCESS
),
45 DWORD dwStartTickCount
= GetTickCount();
46 DWORD dwOldCheckPoint
= ServiceStatus
.dwCheckPoint
;
47 DWORD dwMaxWait
= 2000 * 60; // wait for 2 mins
49 IncrementProgressBar(hProgDlg
);
51 while (ServiceStatus
.dwCurrentState
!= SERVICE_RUNNING
)
53 DWORD dwWaitTime
= ServiceStatus
.dwWaitHint
/ 10;
55 if (!QueryServiceStatusEx(hSc
,
56 SC_STATUS_PROCESS_INFO
,
57 (LPBYTE
)&ServiceStatus
,
58 sizeof(SERVICE_STATUS_PROCESS
),
64 if (ServiceStatus
.dwCheckPoint
> dwOldCheckPoint
)
66 /* The service is making progress, increment the progress bar */
67 IncrementProgressBar(hProgDlg
);
68 dwStartTickCount
= GetTickCount();
69 dwOldCheckPoint
= ServiceStatus
.dwCheckPoint
;
73 if(GetTickCount() >= dwStartTickCount
+ dwMaxWait
)
82 else if (dwWaitTime
> 10000)
90 CloseServiceHandle(hSc
);
93 CloseServiceHandle(hSCManager
);
96 if (ServiceStatus
.dwCurrentState
== SERVICE_RUNNING
)
98 CompleteProgressBar(hProgDlg
);
107 DisplayString(_T("The service failed to start"));
115 DoStart(PMAIN_WND_INFO Info
)
120 hProgDlg
= CreateProgressDialog(Info
->hMainWnd
,
121 Info
->pCurrentService
->lpServiceName
,
122 IDS_PROGRESS_INFO_START
);
126 IncrementProgressBar(hProgDlg
);
128 bRet
= DoStartService(Info
,
131 DestroyWindow(hProgDlg
);