CreateProcess 运行带有参数的 jar

Posted

技术标签:

【中文标题】CreateProcess 运行带有参数的 jar【英文标题】:CreateProcess Running jar with parameters 【发布时间】:2020-04-02 08:20:50 【问题描述】:

我正在尝试使用附加参数启动一个 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' 需要一个值

那么参数字符串应该如何构建呢?

【问题讨论】:

Per the documentation,java.exe 没有 -d 参数,但即使有,您也在命令行的 [arguments] 部分而不是 @987654326 中传递它@部分 @Remy: -d 参数是针对 jar 中的 java 程序的,所以它必须在参数部分。所以它有效,请参阅我自己的答案 【参考方案1】:

好的,现在它无需更改即可工作。 参数字符串看起来和以前一样:

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

【讨论】:

以上是关于CreateProcess 运行带有参数的 jar的主要内容,如果未能解决你的问题,请参考以下文章

运行 JAR 文件的 CreateProcess 以最小化窗口开始

带有参数死锁的 C++ CreateProcess

错误:无法运行程序“jar”:CreateProcess error=2,系统找不到指定的文件

CreateProcess() 不适用于 lpCurrentDirectory

Java Eclipse:运行带有文件参数和外部JAR的程序

forking() 和 CreateProcess()