从 MFC(c++) 应用程序启动的可执行 jar 中获取返回值

Get the return value from executable jar launched from MFC(c++) Application

本文关键字:jar 可执行 获取 返回值 启动 MFC c++ 应用程序      更新时间:2023-10-16

我正在开发一个项目,我正在启动一个jar文件。我想要该jar文件的返回值。我在网上冲浪,得到了一个线索,可以从启动它的程序中读取System.exit(n);。我也开始知道我可以使用 shell 脚本来阅读它。但是我完全不知道如何编写 shell 脚本。我是MFC(C++)的新手。用于启动 jar 文件的代码如下所示。

void CDropboxSync::OnBnClickedDbxPcToCloud()
{
    STARTUPINFOW        siStartupInfo;
    PROCESS_INFORMATION piProcessInfo;
    memset(&siStartupInfo, 0, sizeof(siStartupInfo));
    memset(&piProcessInfo, 0, sizeof(piProcessInfo)); 
    SetCursor(LoadCursor(NULL, IDC_WAIT));
    if (CreateProcess(m_csJrePath, TEXT(" -jar DbxUpldDwnld.jar u"), NULL, NULL, false, CREATE_NO_WINDOW, NULL, NULL, (LPSTARTUPINFOA)&siStartupInfo, &piProcessInfo) == false) {
        AfxMessageBox(_T("Please install Java Runtime Environment(JRE) on your PCn Or JRE not found on given path in INI File."), MB_ICONERROR);
        CloseHandle(piProcessInfo.hProcess);
        CloseHandle(piProcessInfo.hThread);
        return;
    }

    CloseHandle(piProcessInfo.hProcess);
    CloseHandle(piProcessInfo.hThread);
    // TODO: Add your control notification handler code here
} 

那么从这里如何从 JAR 文件中获取返回值。所有的专家请帮助我。提前谢谢。

我认为你不应该混合使用shell脚本和MFC。您从程序启动了该过程,可以调用:

DWORD exitStatus;
CreateProcess(...)
...
WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(piProcessInfo.hProcess, &exitStatus);

以获取已启动进程的退出代码。在致电之前,请务必致电此电话CloseHandle(piProcessInfo.hProcess);

确实,也许您会发现将要启动的进程包装在 shell 脚本中更方便,但这对您的 MFC 代码没有任何影响。