CreateProcess вылетает при передаче команды длинной более 63 символов

272
19 октября 2017, 11:12
char text[] = "schtasks.exe /create /tn abc /sc daily /tr calc.exe /st 12:00\0";
size_t size = strlen(text) + 1;
wchar_t* wtext = new wchar_t[size];
size_t outSize;
mbstowcs_s(&outSize, wtext, size, text, size-1);
LPWSTR ptr = wtext;
if (CreateProcessW(L"C:\\Windows\\System32\\schtasks.exe", ptr, NULL, NULL, FALSE, 0 , NULL, NULL, &startup, &process_info))

Такой код работает и создаёт задачу, но стоит мне увеличить длину строки text, к примеру вместо /tn abc написать /tn abcd, программа вылетает на функции CreateProcessW. Никаких ошибок не выводит, просто The program has unexpectedly finished.. Не могу понять, в чём ошибка, может кто помочь?

UPD: заменил mbstowcs на mbstowcs_s, теперь функция выполняется успешно, но при этом не происходит создание задачи, независимо от длинны команды

Answer 1

Поле cb в STARTUPINFOW должно содержать корректное значение. Остальные поля STARTUPINFO и PROCESS_INFORMATION лучше обнулить.

READ ALSO
Посимвольно считывание с консоли С++ [дубликат]

Посимвольно считывание с консоли С++ [дубликат]

На данный вопрос уже ответили:

411
QTableWidget Drag&Drop cell

QTableWidget Drag&Drop cell

Как в переопределенном методе "dropEvent" определить в какую ячейку перетаскивается объект, так же необходимо знать из какой ячейки этот объект...

372
“Русский” unicode в консоли [дубликат]

“Русский” unicode в консоли [дубликат]

На данный вопрос уже ответили:

337
Не перегружается оператор '>>'

Не перегружается оператор '>>'

По какой причине может не перегружаться оператор '>>'

272