CreateProcess Запуск jar с параметрами

Я пытаюсь запустить файл jar с дополнительными параметрами. Начало банки работает нормально, но жалуется, что параметр пуст. Параметр -d ожидает каталог.

У меня есть это:

CString sParameters;

sParameters.Format("C:\\Java\\bin\\java.exe -jar \"D:\\test\\myprog.jar\" -d \"D:\\testdir\"");

SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;

HANDLE h = CreateFileA(_T("error.log"),
    GENERIC_WRITE,
    FILE_SHARE_WRITE | FILE_SHARE_READ,
    &sa,
    CREATE_ALWAYS,
    FILE_ATTRIBUTE_NORMAL,
    NULL);

PROCESS_INFORMATION pi;
STARTUPINFO si;
BOOL ret2 = FALSE;
DWORD flags = CREATE_DEFAULT_ERROR_MODE;

ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_NORMAL;
si.dwFlags |= STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.hStdInput = NULL;
si.hStdError = h;
si.hStdOutput = h;


if (CreateProcessA(NULL, sParameters.GetBuffer(), NULL, NULL, TRUE, flags, NULL, NULL, &si, &pi) == false)
{

}


CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

CloseHandle(h);

В журнале вывода такой вывод:

Недопустимая опция: '-d D:\testdir', 'd' требует значения

Итак, как должна быть построена строка параметров?


person Marco    schedule 02.04.2020    source источник
comment
Согласно документации, нет -d параметр для java.exe, но даже если бы он был, вы передаете его в части [arguments] командной строки, а не в части [options]   -  person Remy Lebeau    schedule 02.04.2020
comment
@Remy: параметр -d предназначен для программы Java в банке, поэтому он должен быть в части аргументов. И так это работает, см. мой собственный ответ   -  person Marco    schedule 02.04.2020


Ответы (1)


Ок, теперь работает без изменений. Строка параметров выглядит так же, как и раньше:

"C:\Java\bin\java.exe -jar \"D:\test\myprog.jar\" -d \"D:\testdir\""

person Marco    schedule 02.04.2020