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

C++ 从从MFC(c+;+;)应用程序启动的可执行jar获取返回值,c++,shell,mfc,executable-jar,C++,Shell,Mfc,Executable Jar,我正在开发一个项目,其中我正在启动一个jar文件。我想从那个jar文件中得到一个返回值。我在网上冲浪,得到了System.exit(n)的线索可以从我启动程序的地方读取。我也知道我可以用shell脚本阅读它。但我完全不知道如何编写shell脚本。我不熟悉MFC(C++)。用于启动jar文件的代码如下所示 void CDropboxSync::OnBnClickedDbxPcToCloud() { STARTUPINFOW siStartupInfo; PROCESS

我正在开发一个项目,其中我正在启动一个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 PC\n 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.hproces)之前,请确保调用此函数


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

谢谢,伙计,让我试试。我注意到您没有等待进程完成,你可以在它的手柄上等待-查看我的更新答案。感谢更新的代码,我无法获取以前代码的退出状态。