+ if (resource == IDD_EDIT) {\r
+ /* We'll need the service handle later. */\r
+ SetWindowLongPtr(dlg, DWLP_USER, (LONG_PTR) service);\r
+\r
+ /* Service name can't be edited. */\r
+ EnableWindow(GetDlgItem(dlg, IDC_NAME), 0);\r
+ SetFocus(GetDlgItem(dlg, IDOK));\r
+\r
+ /* Set existing details. */\r
+ HWND combo;\r
+ HWND list;\r
+\r
+ /* Application tab. */\r
+ if (service->native) SetDlgItemText(tablist[NSSM_TAB_APPLICATION], IDC_PATH, service->image);\r
+ else SetDlgItemText(tablist[NSSM_TAB_APPLICATION], IDC_PATH, service->exe);\r
+ SetDlgItemText(tablist[NSSM_TAB_APPLICATION], IDC_DIR, service->dir);\r
+ SetDlgItemText(tablist[NSSM_TAB_APPLICATION], IDC_FLAGS, service->flags);\r
+\r
+ /* Details tab. */\r
+ SetDlgItemText(tablist[NSSM_TAB_DETAILS], IDC_DISPLAYNAME, service->displayname);\r
+ SetDlgItemText(tablist[NSSM_TAB_DETAILS], IDC_DESCRIPTION, service->description);\r
+ combo = GetDlgItem(tablist[NSSM_TAB_DETAILS], IDC_STARTUP);\r
+ SendMessage(combo, CB_SETCURSEL, service->startup, 0);\r
+\r
+ /* Log on tab. */\r
+ if (service->username) {\r
+ CheckRadioButton(tablist[NSSM_TAB_LOGON], IDC_LOCALSYSTEM, IDC_ACCOUNT, IDC_ACCOUNT);\r
+ SetDlgItemText(tablist[NSSM_TAB_LOGON], IDC_USERNAME, service->username);\r
+ EnableWindow(GetDlgItem(tablist[NSSM_TAB_LOGON], IDC_INTERACT), 0);\r
+ EnableWindow(GetDlgItem(tablist[NSSM_TAB_LOGON], IDC_USERNAME), 1);\r
+ EnableWindow(GetDlgItem(tablist[NSSM_TAB_LOGON], IDC_PASSWORD1), 1);\r
+ EnableWindow(GetDlgItem(tablist[NSSM_TAB_LOGON], IDC_PASSWORD2), 1);\r
+ }\r
+ else {\r
+ CheckRadioButton(tablist[NSSM_TAB_LOGON], IDC_LOCALSYSTEM, IDC_ACCOUNT, IDC_LOCALSYSTEM);\r
+ if (service->type & SERVICE_INTERACTIVE_PROCESS) SendDlgItemMessage(tablist[NSSM_TAB_LOGON], IDC_INTERACT, BM_SETCHECK, BST_CHECKED, 0);\r
+ }\r
+\r
+ /* Process tab. */\r
+ if (service->priority) {\r
+ int priority = priority_constant_to_index(service->priority);\r
+ combo = GetDlgItem(tablist[NSSM_TAB_PROCESS], IDC_PRIORITY);\r
+ SendMessage(combo, CB_SETCURSEL, priority, 0);\r
+ }\r
+\r
+ if (service->affinity) {\r
+ list = GetDlgItem(tablist[NSSM_TAB_PROCESS], IDC_AFFINITY);\r
+ SendDlgItemMessage(tablist[NSSM_TAB_PROCESS], IDC_AFFINITY_ALL, BM_SETCHECK, BST_UNCHECKED, 0);\r
+ EnableWindow(GetDlgItem(tablist[NSSM_TAB_PROCESS], IDC_AFFINITY), 1);\r
+\r
+ DWORD_PTR affinity, system_affinity;\r
+ if (GetProcessAffinityMask(GetCurrentProcess(), &affinity, &system_affinity)) {\r
+ if ((service->affinity & (__int64) system_affinity) != service->affinity) popup_message(dlg, MB_OK | MB_ICONWARNING, NSSM_GUI_WARN_AFFINITY);\r
+ }\r
+\r
+ for (int i = 0; i < num_cpus(); i++) {\r
+ if (! (service->affinity & (1LL << (__int64) i))) SendMessage(list, LB_SETSEL, 0, i);\r
+ }\r
+ }\r
+\r
+ /* Shutdown tab. */\r
+ if (! (service->stop_method & NSSM_STOP_METHOD_CONSOLE)) {\r
+ SendDlgItemMessage(tablist[NSSM_TAB_SHUTDOWN], IDC_METHOD_CONSOLE, BM_SETCHECK, BST_UNCHECKED, 0);\r
+ EnableWindow(GetDlgItem(tablist[NSSM_TAB_SHUTDOWN], IDC_KILL_CONSOLE), 0);\r
+ }\r
+ SetDlgItemInt(tablist[NSSM_TAB_SHUTDOWN], IDC_KILL_CONSOLE, service->kill_console_delay, 0);\r
+ if (! (service->stop_method & NSSM_STOP_METHOD_WINDOW)) {\r
+ SendDlgItemMessage(tablist[NSSM_TAB_SHUTDOWN], IDC_METHOD_WINDOW, BM_SETCHECK, BST_UNCHECKED, 0);\r
+ EnableWindow(GetDlgItem(tablist[NSSM_TAB_SHUTDOWN], IDC_KILL_WINDOW), 0);\r
+ }\r
+ SetDlgItemInt(tablist[NSSM_TAB_SHUTDOWN], IDC_KILL_WINDOW, service->kill_window_delay, 0);\r
+ if (! (service->stop_method & NSSM_STOP_METHOD_THREADS)) {\r
+ SendDlgItemMessage(tablist[NSSM_TAB_SHUTDOWN], IDC_METHOD_THREADS, BM_SETCHECK, BST_UNCHECKED, 0);\r
+ EnableWindow(GetDlgItem(tablist[NSSM_TAB_SHUTDOWN], IDC_KILL_THREADS), 0);\r
+ }\r
+ SetDlgItemInt(tablist[NSSM_TAB_SHUTDOWN], IDC_KILL_THREADS, service->kill_threads_delay, 0);\r
+ if (! (service->stop_method & NSSM_STOP_METHOD_TERMINATE)) {\r
+ SendDlgItemMessage(tablist[NSSM_TAB_SHUTDOWN], IDC_METHOD_TERMINATE, BM_SETCHECK, BST_UNCHECKED, 0);\r
+ }\r
+\r
+ /* Restart tab. */\r
+ SetDlgItemInt(tablist[NSSM_TAB_EXIT], IDC_THROTTLE, service->throttle_delay, 0);\r
+ combo = GetDlgItem(tablist[NSSM_TAB_EXIT], IDC_APPEXIT);\r
+ SendMessage(combo, CB_SETCURSEL, service->default_exit_action, 0);\r
+\r
+ /* I/O tab. */\r
+ SetDlgItemText(tablist[NSSM_TAB_IO], IDC_STDIN, service->stdin_path);\r
+ SetDlgItemText(tablist[NSSM_TAB_IO], IDC_STDOUT, service->stdout_path);\r
+ SetDlgItemText(tablist[NSSM_TAB_IO], IDC_STDERR, service->stderr_path);\r
+\r
+ /* Rotation tab. */\r
+ if (service->stdout_disposition == CREATE_ALWAYS) SendDlgItemMessage(tablist[NSSM_TAB_ROTATION], IDC_TRUNCATE, BM_SETCHECK, BST_CHECKED, 0);\r
+ if (service->rotate_files) {\r
+ SendDlgItemMessage(tablist[NSSM_TAB_ROTATION], IDC_ROTATE, BM_SETCHECK, BST_CHECKED, 0);\r
+ EnableWindow(GetDlgItem(tablist[NSSM_TAB_ROTATION], IDC_ROTATE_SECONDS), 1);\r
+ EnableWindow(GetDlgItem(tablist[NSSM_TAB_ROTATION], IDC_ROTATE_BYTES_LOW), 1);\r
+ }\r
+ SetDlgItemInt(tablist[NSSM_TAB_ROTATION], IDC_ROTATE_SECONDS, service->rotate_seconds, 0);\r
+ if (! service->rotate_bytes_high) SetDlgItemInt(tablist[NSSM_TAB_ROTATION], IDC_ROTATE_BYTES_LOW, service->rotate_bytes_low, 0);\r
+\r
+ /* Check if advanced settings are in use. */\r
+ if (service->stdout_disposition ^ service->stderr_disposition || service->stdout_disposition & ~CREATE_ALWAYS || service->stderr_disposition & ~CREATE_ALWAYS) popup_message(dlg, MB_OK | MB_ICONWARNING, NSSM_GUI_WARN_STDIO);\r
+ if (service->rotate_bytes_high) popup_message(dlg, MB_OK | MB_ICONWARNING, NSSM_GUI_WARN_ROTATE_BYTES);\r
+\r
+ /* Environment tab. */\r
+ TCHAR *env;\r
+ unsigned long envlen;\r
+ if (service->env_extralen) {\r
+ env = service->env_extra;\r
+ envlen = service->env_extralen;\r
+ }\r
+ else {\r
+ env = service->env;\r
+ envlen = service->envlen;\r
+ if (envlen) SendDlgItemMessage(tablist[NSSM_TAB_ENVIRONMENT], IDC_ENVIRONMENT_REPLACE, BM_SETCHECK, BST_CHECKED, 0);\r
+ }\r
+\r
+ if (envlen) {\r
+ TCHAR *formatted;\r
+ unsigned long newlen;\r
+ if (format_environment(env, envlen, &formatted, &newlen)) {\r
+ popup_message(dlg, MB_OK | MB_ICONEXCLAMATION, NSSM_EVENT_OUT_OF_MEMORY, _T("environment"), _T("nssm_dlg()"));\r
+ }\r
+ else {\r
+ SetDlgItemText(tablist[NSSM_TAB_ENVIRONMENT], IDC_ENVIRONMENT, formatted);\r
+ HeapFree(GetProcessHeap(), 0, formatted);\r
+ }\r
+ }\r
+ if (service->envlen && service->env_extralen) popup_message(dlg, MB_OK | MB_ICONWARNING, NSSM_GUI_WARN_ENVIRONMENT);\r
+ }\r
+\r