C++ 使用参数运行jar的CreateProcess

C++ 使用参数运行jar的CreateProcess,c++,parameters,jar,createprocess,C++,Parameters,Jar,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

我正在尝试用其他参数启动一个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:\testdir',d'需要一个值


那么必须如何构建参数字符串呢?

好的,现在它可以正常工作,无需更改。 paramstring看起来与前面相同:


“C:\Java\bin\Java.exe-jar\'D:\test\myprog.jar\'-D\'D:\testdir\'

,对于
Java.exe
,没有
-D
参数,但即使有,也会在命令行的
[参数]
部分传递它,而不是在
[选项]中传递它。”
portion@Remy:d参数用于jar中的java程序,因此它必须位于arguments部分。这样就行了,看看我自己的答案