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
);
85 GetStringFromDialog(PCREATE_DATA Data
,
89 LPTSTR lpString
= NULL
;
92 hwnd
= GetDlgItem(Data
->hSelf
,
96 iLen
= GetWindowTextLength(hwnd
);
99 lpString
= (LPTSTR
)HeapAlloc(ProcessHeap
,
101 (iLen
+ 1) * sizeof(TCHAR
));
116 GetDataFromDialog(PCREATE_DATA Data
)
120 if ((Data
->ServiceName
= GetStringFromDialog(Data
, IDC_CREATE_SERVNAME
)))
122 if ((Data
->DisplayName
= GetStringFromDialog(Data
, IDC_CREATE_DISPNAME
)))
124 if ((Data
->BinPath
= GetStringFromDialog(Data
, IDC_CREATE_PATH
)))
126 Data
->Description
= GetStringFromDialog(Data
, IDC_CREATE_DESC
);
127 Data
->Options
= GetStringFromDialog(Data
, IDC_CREATE_OPTIONS
);
138 FreeMemory(PCREATE_DATA Data
)
140 if (Data
->ServiceName
!= NULL
)
141 HeapFree(ProcessHeap
,
144 if (Data
->DisplayName
!= NULL
)
145 HeapFree(ProcessHeap
,
148 if (Data
->BinPath
!= NULL
)
149 HeapFree(ProcessHeap
,
152 if (Data
->Description
!= NULL
)
153 HeapFree(ProcessHeap
,
156 if (Data
->Options
!= NULL
)
157 HeapFree(ProcessHeap
,
161 HeapFree(ProcessHeap
,
168 CreateHelpDialogProc(HWND hDlg
,
181 hIcon
= (HICON
) LoadImage(hInstance
,
182 MAKEINTRESOURCE(IDI_SM_ICON
),
193 hHelp
= GetDlgItem(hDlg
,
196 LoadString(hInstance
,
199 sizeof(Buf
) / sizeof(TCHAR
));
209 if ((LOWORD(wParam
) == IDOK
) || (LOWORD(wParam
) == IDCANCEL
))
225 CreateDialogProc(HWND hDlg
,
236 hIcon
= (HICON
)LoadImage(hInstance
,
237 MAKEINTRESOURCE(IDI_SM_ICON
),
256 switch (LOWORD(wParam
))
262 Data
= (PCREATE_DATA
)HeapAlloc(ProcessHeap
,
264 sizeof(CREATE_DATA
));
269 if (GetDataFromDialog(Data
))
275 /* Something went wrong, leave the dialog
276 * open so they can try again */
302 hHelp
= CreateDialog(hInstance
,
303 MAKEINTRESOURCE(IDD_DLG_HELP_OPTIONS
),
305 CreateHelpDialogProc
);