2011-08-19 101 views
0

我新的Windows编程,并写有MinGW的一个小工具,将一个的unrar包。作为下面提供的代码WinRAR的退出代码不同的行为在SP2/SP3和7

Descrition:

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

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版本线索模式用于上述测试。

回答

1

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

+0

0000005被套上存储器读/写/执行没有足够的内存访问权限。这与文件或句柄的访问权限无关。如果没有足够的权限访问资源,Windows不会引发异常,它会将最后一个错误设置为ERROR_ACCESS_DENIED并返回false。 – pezcode

+0

@pezcode,喜欢还是不喜欢,这就是退出代码的OP越来越...为什么winrar的返回该值我真的不知道。我只能假设winrar正在使用此代码来指示可访问性问题。这显然不是winrar使用错误指针的直接结果,但是如果关键操作失败,它可能会返回最后一个错误。如果没有访问winrar的源代码,我们只能猜测返回代码的原因。 – eran

+0

是什么让你觉得它“显然不是一个坏指针的直接结果”?什么企业程序在进程退出时返回一个Windows定义的异常(!=错误)代码?在这里回答这些问题的人会有更少的猜测......如果你仍然不相信我,请查看WinRAR手册:http:// acritum。com /软件/手册/ winrar /(命令行模式>退出代码) – pezcode