2 * PROJECT: ReactOS Services
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/mscutils/servman/create.c
5 * PURPOSE: Create a new service
6 * COPYRIGHT: Copyright 2006-2007 Ged Murphy <gedmurphy@reactos.org>
12 typedef struct _CREATE_DATA
21 } CREATE_DATA
, *PCREATE_DATA
;
23 static BOOL bHelpOpen
= FALSE
;
26 DoCreate(PCREATE_DATA Data
)
32 /* open handle to the SCM */
33 hSCManager
= OpenSCManager(NULL
,
35 SC_MANAGER_ALL_ACCESS
);
38 hSc
= CreateService(hSCManager
,
42 SERVICE_WIN32_OWN_PROCESS
,
56 /* Set the service description as CreateService
57 does not do this for us */
58 SetServiceDescription(Data
->ServiceName
,
61 /* report success to user */
62 if (AllocAndLoadString(&lpSuccess
,
66 DisplayString(lpSuccess
);
73 CloseServiceHandle(hSc
);
77 CloseServiceHandle(hSCManager
);
84 GetStringFromDialog(PCREATE_DATA Data
,
88 LPTSTR lpString
= NULL
;
91 hwnd
= GetDlgItem(Data
->hSelf
,
95 iLen
= GetWindowTextLength(hwnd
);
98 lpString
= (LPTSTR
)HeapAlloc(ProcessHeap
,
100 (iLen
+ 1) * sizeof(TCHAR
));
114 GetDataFromDialog(PCREATE_DATA Data
)
118 if ((Data
->ServiceName
= GetStringFromDialog(Data
, IDC_CREATE_SERVNAME
)))
120 if ((Data
->DisplayName
= GetStringFromDialog(Data
, IDC_CREATE_DISPNAME
)))
122 if ((Data
->BinPath
= GetStringFromDialog(Data
, IDC_CREATE_PATH
)))
124 Data
->Description
= GetStringFromDialog(Data
, IDC_CREATE_DESC
);
125 Data
->Options
= GetStringFromDialog(Data
, IDC_CREATE_OPTIONS
);
136 FreeMemory(PCREATE_DATA Data
)
138 if (Data
->ServiceName
!= NULL
)
139 HeapFree(ProcessHeap
,
142 if (Data
->DisplayName
!= NULL
)
143 HeapFree(ProcessHeap
,
146 if (Data
->BinPath
!= NULL
)
147 HeapFree(ProcessHeap
,
150 if (Data
->Description
!= NULL
)
151 HeapFree(ProcessHeap
,
154 if (Data
->Options
!= NULL
)
155 HeapFree(ProcessHeap
,
159 HeapFree(ProcessHeap
,
165 CreateHelpDialogProc(HWND hDlg
,
178 hIcon
= (HICON
) LoadImage(hInstance
,
179 MAKEINTRESOURCE(IDI_SM_ICON
),
190 hHelp
= GetDlgItem(hDlg
,
193 LoadString(hInstance
,
196 sizeof(Buf
) / sizeof(TCHAR
));
206 if ((LOWORD(wParam
) == IDOK
) || (LOWORD(wParam
) == IDCANCEL
))
221 CreateDialogProc(HWND hDlg
,
232 hIcon
= (HICON
)LoadImage(hInstance
,
233 MAKEINTRESOURCE(IDI_SM_ICON
),
252 switch (LOWORD(wParam
))
258 Data
= (PCREATE_DATA
)HeapAlloc(ProcessHeap
,
260 sizeof(CREATE_DATA
));
265 if (GetDataFromDialog(Data
))
271 /* Something went wrong, leave the dialog
272 * open so they can try again */
298 hHelp
= CreateDialog(hInstance
,
299 MAKEINTRESOURCE(IDD_DLG_HELP_OPTIONS
),
301 CreateHelpDialogProc
);