0

我是 Windows 编程新手,用 mingw 编写了一个小实用程序,可以解压缩一个包。代码如下所示

说明:

当下面的程序运行时,结果如下

XPSP2 32 位和 Windows 7

  • 解压操作:成功
  • CreateProcess 返回码:非零(成功)
  • 退出代码:0(成功)

XP2SP3 32 位

  • 解压操作:成功
  • 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版本的trail Mode。

4

1 回答 1

1

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

于 2011-08-19T14:01:45.607 回答