【问题标题】:Get the return value from executable jar launched from MFC(c++) Application从 MFC(c++) 应用程序启动的可执行 jar 中获取返回值
【发布时间】:2014-01-11 08:09:09
【问题描述】:

我正在开发一个项目,我将在其中启动一个 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 文件中获取返回值。请各位高手帮帮我。提前致谢。

【问题讨论】:

    标签: c++ shell mfc executable-jar


    【解决方案1】:

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

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

    获取您启动的进程的退出代码。打电话给CloseHandle(piProcessInfo.hProcess);之前一定要打这个电话

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

    【讨论】:

    • 谢谢老哥,我试试看。
    • 我注意到您没有等待该过程完成,您可以等待它的句柄 - 请参阅我更新的答案。
    • 感谢更新代码我无法获得之前代码的退出状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多