- Do not send the WM_MOUSEACTIVATE message for a window that has no parent.
[reactos.git] / base / applications / sc / start.c
1 /*
2 * PROJECT: ReactOS Services
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/system/sc/start.c
5 * PURPOSE: Start a service
6 * COPYRIGHT: Copyright 2005 - 2006 Ged Murphy <gedmurphy@gmail.com>
7 *
8 */
9
10 #include "sc.h"
11
12 BOOL Start(LPCTSTR ServiceName, LPCTSTR *ServiceArgs, INT ArgCount)
13 {
14 SC_HANDLE hSCManager;
15 SC_HANDLE hSc;
16 LPSERVICE_STATUS_PROCESS pServiceInfo = NULL;
17
18 #ifdef SCDBG
19 LPCTSTR *TmpArgs = ServiceArgs;
20 INT TmpCnt = ArgCount;
21 _tprintf(_T("service to control - %s\n"), ServiceName);
22 _tprintf(_T("Arguments:\n"));
23 while (TmpCnt)
24 {
25 _tprintf(_T(" %s\n"), *TmpArgs);
26 TmpArgs++;
27 TmpCnt--;
28 }
29 _tprintf(_T("\n"));
30 #endif /* SCDBG */
31
32 hSCManager = OpenSCManager(NULL,
33 NULL,
34 SC_MANAGER_CONNECT);
35 if (hSCManager == NULL)
36 {
37 ReportLastError();
38 return FALSE;
39 }
40
41 hSc = OpenService(hSCManager,
42 ServiceName,
43 SERVICE_START | SERVICE_QUERY_STATUS);
44
45 if (hSc == NULL)
46 goto fail;
47
48 if (! StartService(hSc,
49 ArgCount,
50 ServiceArgs))
51 {
52 _tprintf(_T("[SC] StartService FAILED %lu:\n\n"), GetLastError());
53 goto fail;
54 }
55
56 pServiceInfo = QueryService(ServiceName);
57 if (pServiceInfo != NULL)
58 {
59 PrintService(ServiceName,
60 pServiceInfo,
61 TRUE);
62 }
63
64 HeapFree(GetProcessHeap(), 0, pServiceInfo);
65 CloseServiceHandle(hSc);
66 CloseServiceHandle(hSCManager);
67
68 return TRUE;
69
70 fail:
71 ReportLastError();
72 if (pServiceInfo) HeapFree(GetProcessHeap(), 0, pServiceInfo);
73 if (hSc) CloseServiceHandle(hSc);
74 if (hSCManager) CloseServiceHandle(hSCManager);
75 return FALSE;
76
77 }