int install(HWND window) {\r
if (! window) return 1;\r
\r
- /* Check parameters in the window */\r
- char name[VALUE_LENGTH];\r
- char exe[EXE_LENGTH];\r
- char flags[VALUE_LENGTH];\r
-\r
- /* Get service name */\r
- if (! GetDlgItemText(window, IDC_NAME, name, sizeof(name))) {\r
- popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_MISSING_SERVICE_NAME);\r
- return 2;\r
- }\r
-\r
- /* Get executable name */\r
- if (! GetDlgItemText(window, IDC_PATH, exe, sizeof(exe))) {\r
- popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_MISSING_PATH);\r
- return 3;\r
- }\r
+ nssm_service_t *service = alloc_nssm_service();\r
+ if (service) {\r
+ /* Get service name. */\r
+ if (! GetDlgItemText(window, IDC_NAME, service->name, sizeof(service->name))) {\r
+ popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_MISSING_SERVICE_NAME);\r
+ cleanup_nssm_service(service);\r
+ return 2;\r
+ }\r
\r
- /* Get flags */\r
- if (SendMessage(GetDlgItem(window, IDC_FLAGS), WM_GETTEXTLENGTH, 0, 0)) {\r
- if (! GetDlgItemText(window, IDC_FLAGS, flags, sizeof(flags))) {\r
- popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_INVALID_OPTIONS);\r
- return 4;\r
+ /* Get executable name */\r
+ if (! GetDlgItemText(window, IDC_PATH, service->exe, sizeof(service->exe))) {\r
+ popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_MISSING_PATH);\r
+ return 3;\r
}\r
+ \r
+ /* Get flags */\r
+ if (SendMessage(GetDlgItem(window, IDC_FLAGS), WM_GETTEXTLENGTH, 0, 0)) {\r
+ if (! GetDlgItemText(window, IDC_FLAGS, service->flags, sizeof(service->flags))) {\r
+ popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_INVALID_OPTIONS);\r
+ return 4;\r
+ }
+ }\r
+\r
+ memmove(service->dir, service->exe, strlen(service->exe));\r
+ strip_basename(service->dir);\r
}\r
- else ZeroMemory(&flags, sizeof(flags));\r
\r
- /* See if it works */\r
- switch (install_service(name, exe, flags)) {\r
+ /* See if it works. */\r
+ switch (install_service(service)) {\r
+ case 1:\r
+ popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_EVENT_OUT_OF_MEMORY, "service", "install()");\r
+ cleanup_nssm_service(service);\r
+ return 1;\r
+\r
case 2:\r
popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_MESSAGE_OPEN_SERVICE_MANAGER_FAILED);\r
+ cleanup_nssm_service(service);\r
return 2;\r
\r
case 3:\r
popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_MESSAGE_PATH_TOO_LONG, NSSM);\r
+ cleanup_nssm_service(service);\r
return 3;\r
\r
case 4:\r
popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_OUT_OF_MEMORY_FOR_IMAGEPATH);\r
+ cleanup_nssm_service(service);\r
return 4;\r
\r
case 5:\r
popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_INSTALL_SERVICE_FAILED);\r
+ cleanup_nssm_service(service);\r
return 5;\r
\r
case 6:\r
popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_CREATE_PARAMETERS_FAILED);\r
+ cleanup_nssm_service(service);\r
return 6;\r
}\r
\r
- popup_message(MB_OK, NSSM_MESSAGE_SERVICE_INSTALLED, name);\r
+ popup_message(MB_OK, NSSM_MESSAGE_SERVICE_INSTALLED, service->name);\r
+ cleanup_nssm_service(service);\r
return 0;\r
}\r
\r
int remove(HWND window) {\r
if (! window) return 1;\r
\r
- /* Check parameters in the window */\r
- char name[VALUE_LENGTH];\r
+ /* See if it works */\r
+ nssm_service_t *service = alloc_nssm_service();\r
+ if (service) {\r
+ /* Get service name */\r
+ if (! GetDlgItemText(window, IDC_NAME, service->name, sizeof(service->name))) {\r
+ popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_MISSING_SERVICE_NAME);\r
+ cleanup_nssm_service(service);\r
+ return 2;\r
+ }\r
\r
- /* Get service name */\r
- if (! GetDlgItemText(window, IDC_NAME, name, sizeof(name))) {\r
- popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_MISSING_SERVICE_NAME);\r
- return 2;\r
+ /* Confirm */\r
+ if (popup_message(MB_YESNO, NSSM_GUI_ASK_REMOVE_SERVICE, service->name) != IDYES) {\r
+ cleanup_nssm_service(service);\r
+ return 0;\r
+ }\r
}\r
\r
- /* Confirm */\r
- if (popup_message(MB_YESNO, NSSM_GUI_ASK_REMOVE_SERVICE, name) != IDYES) return 0;\r
+ switch (remove_service(service)) {\r
+ case 1:\r
+ popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_EVENT_OUT_OF_MEMORY, "service", "remove()");\r
+ cleanup_nssm_service(service);\r
+ return 1;\r
\r
- /* See if it works */\r
- switch (remove_service(name)) {\r
case 2:\r
popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_MESSAGE_OPEN_SERVICE_MANAGER_FAILED);\r
+ cleanup_nssm_service(service);\r
return 2;\r
\r
case 3:\r
popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_SERVICE_NOT_INSTALLED);\r
return 3;\r
+ cleanup_nssm_service(service);\r
\r
case 4:\r
popup_message(MB_OK | MB_ICONEXCLAMATION, NSSM_GUI_REMOVE_SERVICE_FAILED);\r
+ cleanup_nssm_service(service);\r
return 4;\r
}\r
\r
- popup_message(MB_OK, NSSM_MESSAGE_SERVICE_REMOVED, name);\r
+ popup_message(MB_OK, NSSM_MESSAGE_SERVICE_REMOVED, service->name);\r
+ cleanup_nssm_service(service);\r
return 0;\r
}\r
\r