bool Downloader::DeCompression()
{
WIN32_FIND_DATA fileData;
HANDLE hSearch;
hSearch = FindFirstFile(gDir.m_RARFile, &fileData);
if(hSearch == INVALID_HANDLE_VALUE)
{
return false;
}
FindClose(hSearch);
SHELLEXECUTEINFO shExecInfo;
shExecInfo.cbSize = sizeof(shExecInfo);
shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shExecInfo.hwnd = AfxGetMainWnd()->m_hWnd;
shExecInfo.lpVerb = NULL;
shExecInfo.lpFile = _T("rar");
//每个路径为一个参数,又由于shell以空格作为分隔符来分开参数,所以路径里有空格的就会出错,所以要用“”把每个参数包住才能使参数中包含空格
shExecInfo.lpParameters = _T(" x /"") + gDir.m_RARFile + _T("/"/"") + gDir.m_Data + _T("/"");
shExecInfo.lpDirectory = NULL;
shExecInfo.nShow = SW_SHOW;
shExecInfo.hInstApp = NULL;
if (!ShellExecuteEx(&shExecInfo))
{
memset(&shExecInfo, 0, sizeof(shExecInfo));
CloseHandle(shExecInfo.hwnd);
CloseHandle(shExecInfo.hProcess);
CloseHandle(shExecInfo.hInstApp);
return false;
}
if (WaitForSingleObject(shExecInfo.hProcess,60000) == WAIT_TIMEOUT)
{
memset(&shExecInfo, 0, sizeof(shExecInfo));
CloseHandle(shExecInfo.hwnd);
CloseHandle(shExecInfo.hProcess);
CloseHandle(shExecInfo.hInstApp);
return false;
}
memset(&shExecInfo, 0, sizeof(shExecInfo));
CloseHandle(shExecInfo.hwnd);
CloseHandle(shExecInfo.hProcess);
CloseHandle(shExecInfo.hInstApp);
return true;
}