Код выхода WinRar отличается поведением в SP2 / SP3 и 7 - PullRequest
0 голосов
/ 19 августа 2011

Я новичок в программировании для Windows и написал небольшую утилиту для mingw, которая разархивирует пакет.Код приведен ниже:

Описание:

Когда запускается следующая программа, результаты выглядят следующим образом:

XPSP2 32 битаи Windows 7

  • Операция Untar: Успех
  • Код возврата CreateProcess: Ноль Ноль (Успех)
  • Код выхода: 0 (Успех)

XP2SP3 32 бита

  • Операция Untar: успех
  • Код возврата 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 Ответ

1 голос
/ 19 августа 2011

Это огромное положительное число в шестнадцатеричном формате 0xC0000005. Это распространенная ошибка Windows, что означает «Нарушение прав доступа». Почему именно вы это получаете, зависит от того, что пытается сделать winrar, но проблема может быть в правах доступа к файлам. Я предлагаю вам попробовать с ProcMon , наблюдая за активностью файла вашей программы. Если доступ к одному из файлов запрещен, вы увидите его в журнале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...