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

时间:2014-01-11 08:09:09

标签: c++ shell mfc executable-jar

我正在开发一个项目,我正在启动一个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文件中获取返回值。所有的专家都请他们帮助我。提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

获取您启动的进程的退出代码。请务必在致电CloseHandle(piProcessInfo.hProcess);

之前致电此处

虽然也许你会发现在shell脚本中包装你正在启动的进程会更方便,但这对你的MFC代码没有任何影响。