WinRar退出代码在SP2 / SP3和7中的不同行为

时间:2011-08-19 12:34:42

标签: windows programming-languages winrar

我是Windows编程的新手,并且编写了一个带有mingw的小实用程序,它将解压缩包。代码如下所示

Descrition:

运行以下程序时,结果如下

XPSP2 32位和Windows 7

  • Untar Operation:Success
  • CreateProcess返回码:非零(成功)
  • 退出代码:0(成功)

XP2SP3 32位

  • Untar Operation:Success
  • CreateProcess返回码:非零(成功)
  • 退出代码:3221225477

问题陈述

我不确定为什么仅在XP2SP3补丁中,winRar操作将退出代码提供为巨大的正值。你在下面的代码中发现了什么问题吗?请帮忙。


int main()
{
    string ProgramName = "C:\\Program Files\\WinRAR\\WinRAR.exe";   
    STARTUPINFO StartupInfo;
    PROCESS_INFORMATION ProcessInfo;

        memset(&StartupInfo, 0, sizeof(STARTUPINFO));
    memset(&ProcessInfo, 0, sizeof(PROCESS_INFORMATION)

    if (CreateProcess((LPCTSTR)ProgramName.c_str(),(LPCTSTR)"WinRAR.exe x -y -ibck d:\\abc.tar d:\\"),NULL,
    NULL,
    FALSE,
    NORMAL_PRIORITY_CLASS,
    NULL,
    NULL,
    &StartupInfo,
    &ProcessInfo) == 0)
    {
        string tmpStr("Error executing");
        tmpStr += ProgramName;
        cout<<"StmtDesigner"<<tmpStr<<"CreateProcess failed"<<endl;
    }
    else
    {
        string tmpStr("Succes executing");
        tmpStr += ProgramName;
        cout<<"StmtDesigner"<<tmpStr<<"CreateProcess Success"<<endl;



            WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
            DWORD exitCode=0;
            if (GetExitCodeProcess(ProcessInfo.hProcess, &exitCode))
            {
            string tmpStr("GetExitCodeProcess");
            tmpStr += ProgramName;
            cout<<tmpStr<<"WinRAR.exe x -y -ibc<<endl;
            }
    }

    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);

    getch();
    return 0;
}

PS:WinRar 3.8版本跟踪模式用于上述测试。

1 个答案:

答案 0 :(得分:1)

十六进制的巨大正数是0xC0000005。这是一个常见的Windows错误,这意味着“访问冲突”。你为什么要得到它真的取决于winrar尝试做什么,但问题可能在于对文件的访问权限。我建议您尝试ProcMon观看程序的文件活动。如果拒绝访问其中一个文件,您将在日志中看到它。