That means the username is actually passed in the additional parameter.\r
*/\r
bool localsystem = false;\r
+ bool virtual_account = false;\r
TCHAR *username = NSSM_LOCALSYSTEM_ACCOUNT;\r
TCHAR *password = 0;\r
if (additional) {\r
username = (TCHAR *) well_known;\r
password = _T("");\r
}\r
+ else if (is_virtual_account(service_name, username)) virtual_account = true;\r
else if (! password) {\r
/* We need a password if the account requires it. */\r
print_message(stderr, NSSM_MESSAGE_MISSING_PASSWORD, name);\r
HeapFree(GetProcessHeap(), 0, qsc);\r
}\r
\r
- if (! well_known) {\r
+ if (! well_known && ! virtual_account) {\r
if (grant_logon_as_service(username)) {\r
if (passwordsize) SecureZeroMemory(password, passwordsize);\r
print_message(stderr, NSSM_MESSAGE_GRANT_LOGON_AS_SERVICE_FAILED, username);\r
}\r
\r
settings_t settings[] = {\r
- { NSSM_REG_EXE, REG_EXPAND_SZ, (void *) _T(""), false, 0, setting_set_string, setting_get_string, 0 },\r
+ { NSSM_REG_EXE, REG_EXPAND_SZ, (void *) _T(""), false, 0, setting_set_string, setting_get_string, setting_not_dumpable },\r
{ NSSM_REG_FLAGS, REG_EXPAND_SZ, (void *) _T(""), false, 0, setting_set_string, setting_get_string, 0 },\r
{ NSSM_REG_DIR, REG_EXPAND_SZ, (void *) _T(""), false, 0, setting_set_string, setting_get_string, 0 },\r
{ NSSM_REG_EXIT, REG_SZ, (void *) exit_action_strings[NSSM_EXIT_RESTART], false, ADDITIONAL_MANDATORY, setting_set_exit_action, setting_get_exit_action, setting_dump_exit_action },\r