我是Windows编程的新手,并且编写了一个带有mingw的小实用程序,它将解压缩包。代码如下所示
Descrition:
运行以下程序时,结果如下
XPSP2 32位和Windows 7
XP2SP3 32位
问题陈述
我不确定为什么仅在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版本跟踪模式用于上述测试。
答案 0 :(得分:1)
十六进制的巨大正数是0xC0000005。这是一个常见的Windows错误,这意味着“访问冲突”。你为什么要得到它真的取决于winrar尝试做什么,但问题可能在于对文件的访问权限。我建议您尝试ProcMon观看程序的文件活动。如果拒绝访问其中一个文件,您将在日志中看到它。