From a219ebec32fe281fa45d4f10370d90d8fe221784 Mon Sep 17 00:00:00 2001 From: Alexander Shaposhnikov Date: Sun, 10 Sep 2017 21:02:06 +0000 Subject: [PATCH] [RAPPS] Stopped GCC whining (fixed GCC build) svn path=/branches/GSoC_2017/rapps/; revision=75824 --- .../base/applications/rapps/CMakeLists.txt | 5 +- reactos/base/applications/rapps/available.cpp | 9 ++- reactos/base/applications/rapps/gui.cpp | 37 +++++---- .../applications/rapps/include/available.h | 10 +-- .../base/applications/rapps/include/defines.h | 4 +- .../base/applications/rapps/include/dialogs.h | 1 - .../base/applications/rapps/include/rapps.h | 2 - reactos/base/applications/rapps/loaddlg.cpp | 75 +++++++++---------- reactos/base/applications/rapps/misc.cpp | 6 +- 9 files changed, 76 insertions(+), 73 deletions(-) diff --git a/reactos/base/applications/rapps/CMakeLists.txt b/reactos/base/applications/rapps/CMakeLists.txt index 350ead0a654..82ade46cc7a 100644 --- a/reactos/base/applications/rapps/CMakeLists.txt +++ b/reactos/base/applications/rapps/CMakeLists.txt @@ -32,7 +32,10 @@ list(APPEND SOURCE include/unattended.h ) -add_definitions(-DUSE_CERT_PINNING) +add_definitions( + -DUSE_CERT_PINNING + -D_ATL_NO_EXCEPTIONS) + file(GLOB_RECURSE rapps_rc_deps res/*.*) add_rc_deps(rapps.rc ${rapps_rc_deps}) add_executable(rapps ${SOURCE} rapps.rc) diff --git a/reactos/base/applications/rapps/available.cpp b/reactos/base/applications/rapps/available.cpp index 69817daafea..2574270a8e3 100644 --- a/reactos/base/applications/rapps/available.cpp +++ b/reactos/base/applications/rapps/available.cpp @@ -19,9 +19,9 @@ // CAvailableApplicationInfo CAvailableApplicationInfo::CAvailableApplicationInfo(const ATL::CStringW& sFileNameParam) - : m_Parser(sFileNameParam) + : m_IsInstalled(FALSE), m_HasLanguageInfo(FALSE), m_HasInstalledVersion(FALSE), m_Parser(sFileNameParam) { - m_LicenseType = LicenseType::LICENSE_NONE; + m_LicenseType = LICENSE_NONE; m_sFileName = sFileNameParam; @@ -74,7 +74,8 @@ VOID CAvailableApplicationInfo::RetrieveInstalledStatus() VOID CAvailableApplicationInfo::RetrieveInstalledVersion() { - ATL::CStringW szNameVersion = m_szName + L" " + m_szVersion; + ATL::CStringW szNameVersion; + szNameVersion = m_szName + L" " + m_szVersion; m_HasInstalledVersion = ::GetInstalledVersion(&m_szInstalledVersion, m_szRegName) || ::GetInstalledVersion(&m_szInstalledVersion, m_szName) || ::GetInstalledVersion(&m_szInstalledVersion, szNameVersion); @@ -133,7 +134,7 @@ VOID CAvailableApplicationInfo::RetrieveLicenseType() } else { - m_LicenseType = LicenseType::LICENSE_NONE; + m_LicenseType = LICENSE_NONE; } } diff --git a/reactos/base/applications/rapps/gui.cpp b/reactos/base/applications/rapps/gui.cpp index bcceeb0a814..e8ea7313923 100644 --- a/reactos/base/applications/rapps/gui.cpp +++ b/reactos/base/applications/rapps/gui.cpp @@ -1,4 +1,4 @@ -/* +/* * PROJECT: ReactOS Applications Manager * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * FILE: base/applications/rapps/gui.cpp @@ -113,13 +113,13 @@ class CAvailableAppView ATL::CStringW szLicense; switch (Info->m_LicenseType) { - case LicenseType::LICENSE_OPENSOURCE: + case LICENSE_OPENSOURCE: szLicense.LoadStringW(IDS_LICENSE_OPENSOURCE); break; - case LicenseType::LICENSE_FREEWARE: + case LICENSE_FREEWARE: szLicense.LoadStringW(IDS_LICENSE_FREEWARE); break; - case LicenseType::LICENSE_TRIAL: + case LICENSE_TRIAL: szLicense.LoadStringW(IDS_LICENSE_TRIAL); break; default: @@ -368,8 +368,8 @@ class CAppsListView : public: CAppsListView() : - bAscending(TRUE), bHasAllChecked(FALSE), + bAscending(TRUE), bHasCheckboxes(FALSE) { } @@ -557,11 +557,17 @@ public: class CSideTreeView : public CUiWindow { - HIMAGELIST hImageTreeView = ImageList_Create(TREEVIEW_ICON_SIZE, TREEVIEW_ICON_SIZE, - GetSystemColorDepth() | ILC_MASK, - 0, 1); + HIMAGELIST hImageTreeView; public: + CSideTreeView() : + CUiWindow(), + hImageTreeView(ImageList_Create(TREEVIEW_ICON_SIZE, TREEVIEW_ICON_SIZE, + GetSystemColorDepth() | ILC_MASK, + 0, 1)) + { + } + HTREEITEM AddItem(HTREEITEM hParent, ATL::CStringW &Text, INT Image, INT SelectedImage, LPARAM lParam) { return CUiWindow::AddItem(hParent, const_cast(Text.GetString()), Image, SelectedImage, lParam); @@ -603,7 +609,6 @@ public: ~CSideTreeView() { DestroyImageList(); - CUiWindow::~CUiWindow(); } }; @@ -1352,7 +1357,7 @@ private: UpdateApplicationsList(-1); } - } + } break; case ID_UNINSTALL: @@ -1409,7 +1414,7 @@ private: } } - static BOOL SearchPatternMatch(PCWSTR szHaystack, PCWSTR szNeedle) + static BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle) { if (!*szNeedle) return TRUE; @@ -1456,15 +1461,15 @@ private: HIMAGELIST hImageListView = ListView_GetImageList(hListView, LVSIL_SMALL); - if (!SearchPatternMatch(Info->m_szName, szSearchPattern) && - !SearchPatternMatch(Info->m_szDesc, szSearchPattern)) + if (!SearchPatternMatch(Info->m_szName.GetString(), szSearchPattern) && + !SearchPatternMatch(Info->m_szDesc.GetString(), szSearchPattern)) { return TRUE; } /* Load icon from file */ ATL::CStringW szIconPath; - szIconPath.Format(L"%lsicons\\%ls.ico", szFolderPath, Info->m_szName); + szIconPath.Format(L"%lsicons\\%ls.ico", szFolderPath, Info->m_szName.GetString()); hIcon = (HICON) LoadImageW(NULL, szIconPath.GetString(), IMAGE_ICON, @@ -1481,7 +1486,7 @@ private: Index = ImageList_AddIcon(hImageListView, hIcon); DestroyIcon(hIcon); - Index = ListViewAddItem(Info->m_Category, Index, Info->m_szName, (LPARAM) Info); + Index = ListViewAddItem(Info->m_Category, Index, Info->m_szName.GetString(), (LPARAM) Info); ListView_SetImageList(hListView, hImageListView, LVSIL_SMALL); ListView_SetItemText(hListView, Index, 1, const_cast(Info->m_szVersion.GetString())); @@ -1515,7 +1520,7 @@ private: { EnumType = SelectedEnumType; } - + //if previous one was INSTALLED purge the list //TODO: make the Installed category a separate class to avoid doing this if (bWasInInstalled) diff --git a/reactos/base/applications/rapps/include/available.h b/reactos/base/applications/rapps/include/available.h index 0c1b61df715..aa1aebda378 100644 --- a/reactos/base/applications/rapps/include/available.h +++ b/reactos/base/applications/rapps/include/available.h @@ -19,7 +19,7 @@ enum LicenseType inline BOOL IsLicenseType(INT x) { - return (x >= LicenseType::LICENSE_MIN && x <= LicenseType::LICENSE_MAX); + return (x >= LICENSE_MIN && x <= LICENSE_MAX); } struct CAvailableApplicationInfo @@ -60,9 +60,9 @@ struct CAvailableApplicationInfo VOID SetLastWriteTime(FILETIME* ftTime); private: - BOOL m_IsInstalled = FALSE; - BOOL m_HasLanguageInfo = FALSE; - BOOL m_HasInstalledVersion = FALSE; + BOOL m_IsInstalled; + BOOL m_HasLanguageInfo; + BOOL m_HasInstalledVersion; CConfigParser m_Parser; inline BOOL GetString(LPCWSTR lpKeyName, ATL::CStringW& ReturnedString); @@ -86,7 +86,7 @@ class CAvailableApps static ATL::CStringW m_szSearchPath; static BOOL InitializeStaticStrings(); - + ATL::CAtlList m_InfoList; public: diff --git a/reactos/base/applications/rapps/include/defines.h b/reactos/base/applications/rapps/include/defines.h index 935cf6d5be0..7934e96b23a 100644 --- a/reactos/base/applications/rapps/include/defines.h +++ b/reactos/base/applications/rapps/include/defines.h @@ -61,10 +61,10 @@ enum AppsCategories inline BOOL IsAvailableEnum(INT x) { - return (x >= AppsCategories::ENUM_AVAILABLE_MIN && x <= AppsCategories::ENUM_AVAILABLE_MAX); + return (x >= ENUM_AVAILABLE_MIN && x <= ENUM_AVAILABLE_MAX); } inline BOOL IsInstalledEnum(INT x) { - return (x >= AppsCategories::ENUM_INSTALLED_MIN && x <= AppsCategories::ENUM_INSTALLED_MAX); + return (x >= ENUM_INSTALLED_MIN && x <= ENUM_INSTALLED_MAX); } diff --git a/reactos/base/applications/rapps/include/dialogs.h b/reactos/base/applications/rapps/include/dialogs.h index 9a2480623ba..51efdc8b7fc 100644 --- a/reactos/base/applications/rapps/include/dialogs.h +++ b/reactos/base/applications/rapps/include/dialogs.h @@ -13,7 +13,6 @@ class CDownloadManager { static ATL::CSimpleArray AppsToInstallList; static CDowloadingAppsListView DownloadsListView; - static INT iCurrentApp; static VOID Download(const DownloadInfo& DLInfo, BOOL bIsModal = FALSE); diff --git a/reactos/base/applications/rapps/include/rapps.h b/reactos/base/applications/rapps/include/rapps.h index 09196b19214..d3534412703 100644 --- a/reactos/base/applications/rapps/include/rapps.h +++ b/reactos/base/applications/rapps/include/rapps.h @@ -1,5 +1,3 @@ -#pragma once - #ifndef _RAPPS_H #define _RAPPS_H diff --git a/reactos/base/applications/rapps/loaddlg.cpp b/reactos/base/applications/rapps/loaddlg.cpp index a7af0c13c6f..7b6f2d40a95 100644 --- a/reactos/base/applications/rapps/loaddlg.cpp +++ b/reactos/base/applications/rapps/loaddlg.cpp @@ -1,4 +1,4 @@ -/* +/* * PROJECT: ReactOS Applications Manager * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * FILE: base/applications/rapps/loaddlg.cpp @@ -51,17 +51,17 @@ #define CERT_SUBJECT_INFO "Domain Control Validated\r\n*.reactos.org" #endif -typedef enum +enum DownloadStatus { - DLWaiting = IDS_STATUS_WAITING, - DLDownloading = IDS_STATUS_DOWNLOADING, - DLWaitingToInstall = IDS_STATUS_DOWNLOADED, - DLInstalling = IDS_STATUS_INSTALLING, - DLInstalled = IDS_STATUS_INSTALLED, - DLFinished = IDS_STATUS_FINISHED -} DOWNLOAD_STATUS; + DLSTATUS_WAITING = IDS_STATUS_WAITING, + DLSTATUS_DOWNLOADING = IDS_STATUS_DOWNLOADING, + DLSTATUS_WAITING_INSTALL = IDS_STATUS_DOWNLOADED, + DLSTATUS_INSTALLING = IDS_STATUS_INSTALLING, + DLSTATUS_INSTALLED = IDS_STATUS_INSTALLED, + DLSTATUS_FINISHED = IDS_STATUS_FINISHED +}; -ATL::CStringW LoadStatusString(DOWNLOAD_STATUS StatusParam) +ATL::CStringW LoadStatusString(DownloadStatus StatusParam) { ATL::CStringW szString; szString.LoadStringW(StatusParam); @@ -259,11 +259,11 @@ public: { for (INT i = 0; i < arrInfo.GetSize(); ++i) { - AddRow(i, arrInfo[i].szName.GetString(), DOWNLOAD_STATUS::DLWaiting); + AddRow(i, arrInfo[i].szName.GetString(), DLSTATUS_WAITING); } } - VOID SetDownloadStatus(INT ItemIndex, DOWNLOAD_STATUS Status) + VOID SetDownloadStatus(INT ItemIndex, DownloadStatus Status) { HWND hListView = GetWindow(); ATL::CStringW szBuffer = LoadStatusString(Status); @@ -283,7 +283,7 @@ public: return InsertItem(&Item); } - VOID AddRow(INT RowIndex, LPCWSTR szAppName, const DOWNLOAD_STATUS Status) + VOID AddRow(INT RowIndex, LPCWSTR szAppName, const DownloadStatus Status) { ATL::CStringW szStatus = LoadStatusString(Status); AddItem(RowIndex, @@ -376,7 +376,6 @@ inline VOID MessageBox_LoadString(HWND hMainWnd, INT StringID) // CDownloadManager ATL::CSimpleArray CDownloadManager::AppsToInstallList; CDowloadingAppsListView CDownloadManager::DownloadsListView; -INT CDownloadManager::iCurrentApp; VOID CDownloadManager::Download(const DownloadInfo &DLInfo, BOOL bIsModal) { @@ -549,6 +548,8 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) PWSTR p, q; HWND hDlg = static_cast(param)->Dialog; + HWND Item; + INT iAppId; ULONG dwContentLen, dwBytesWritten, dwBytesRead, dwStatus; ULONG dwCurrentBytesRead = 0; @@ -567,25 +568,21 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) URL_COMPONENTS urlComponents; size_t urlLength, filenameLength; - const INT iAppId = iCurrentApp; const ATL::CSimpleArray &InfoArray = static_cast(param)->AppInfo; LPCWSTR szCaption = static_cast(param)->szCaption; ATL::CStringW szNewCaption; - if (InfoArray.GetSize() <= 0) { MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD); goto end; } - for (INT iAppId = 0; iAppId < InfoArray.GetSize(); ++iAppId) + for (iAppId = 0; iAppId < InfoArray.GetSize(); ++iAppId) { - const DownloadInfo &CurrentInfo = InfoArray[iAppId]; - // build the path for the download - p = wcsrchr(CurrentInfo.szUrl.GetString(), L'/'); - q = wcsrchr(CurrentInfo.szUrl.GetString(), L'?'); + p = wcsrchr(InfoArray[iAppId].szUrl.GetString(), L'/'); + q = wcsrchr(InfoArray[iAppId].szUrl.GetString(), L'?'); // do we have a final slash separator? if (!p) @@ -600,7 +597,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) filenameLength -= wcslen(q - 1) * sizeof(WCHAR); // is this URL an update package for RAPPS? if so store it in a different place - if (CurrentInfo.szUrl == APPLICATION_DATABASE_URL) + if (InfoArray[iAppId].szUrl == APPLICATION_DATABASE_URL) { bCab = TRUE; if (!GetStorageDirectory(Path)) @@ -622,15 +619,15 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) Path += L"\\"; Path += (LPWSTR) (p + 1); - if (!bCab && CurrentInfo.szSHA1[0] && GetFileAttributesW(Path.GetString()) != INVALID_FILE_ATTRIBUTES) + if (!bCab && InfoArray[iAppId].szSHA1[0] && GetFileAttributesW(Path.GetString()) != INVALID_FILE_ATTRIBUTES) { // only open it in case of total correctness - if (VerifyInteg(CurrentInfo.szSHA1.GetString(), Path)) + if (VerifyInteg(InfoArray[iAppId].szSHA1.GetString(), Path)) goto run; } // Reset progress bar - HWND Item = GetDlgItem(hDlg, IDC_DOWNLOAD_PROGRESS); + Item = GetDlgItem(hDlg, IDC_DOWNLOAD_PROGRESS); if (Item) { SendMessageW(Item, PBM_SETPOS, 0, 0); @@ -639,7 +636,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) // Change caption to show the currently downloaded app if (!bCab) { - szNewCaption.Format(szCaption, CurrentInfo.szName.GetString()); + szNewCaption.Format(szCaption, InfoArray[iAppId].szName.GetString()); } else { @@ -649,9 +646,9 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) SetWindowTextW(hDlg, szNewCaption.GetString()); // Add the download URL - SetDlgItemTextW(hDlg, IDC_DOWNLOAD_STATUS, CurrentInfo.szUrl.GetString()); + SetDlgItemTextW(hDlg, IDC_DOWNLOAD_STATUS, InfoArray[iAppId].szUrl.GetString()); - DownloadsListView.SetDownloadStatus(iAppId, DOWNLOAD_STATUS::DLDownloading); + DownloadsListView.SetDownloadStatus(iAppId, DLSTATUS_DOWNLOADING); // download it bTempfile = TRUE; @@ -680,7 +677,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) if (!hOpen) goto end; - hFile = InternetOpenUrlW(hOpen, CurrentInfo.szUrl.GetString(), NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION, 0); + hFile = InternetOpenUrlW(hOpen, InfoArray[iAppId].szUrl.GetString(), NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION, 0); if (!hFile) { @@ -702,13 +699,13 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) memset(&urlComponents, 0, sizeof(urlComponents)); urlComponents.dwStructSize = sizeof(urlComponents); - urlLength = CurrentInfo.szUrl.GetLength(); + urlLength = InfoArray[iAppId].szUrl.GetLength(); urlComponents.dwSchemeLength = urlLength + 1; urlComponents.lpszScheme = (LPWSTR) malloc(urlComponents.dwSchemeLength * sizeof(WCHAR)); urlComponents.dwHostNameLength = urlLength + 1; urlComponents.lpszHostName = (LPWSTR) malloc(urlComponents.dwHostNameLength * sizeof(WCHAR)); - if (!InternetCrackUrlW(CurrentInfo.szUrl, urlLength + 1, ICU_DECODE | ICU_ESCAPE, &urlComponents)) + if (!InternetCrackUrlW(InfoArray[iAppId].szUrl, urlLength + 1, ICU_DECODE | ICU_ESCAPE, &urlComponents)) goto end; if (urlComponents.nScheme == INTERNET_SCHEME_HTTP || urlComponents.nScheme == INTERNET_SCHEME_HTTPS) @@ -720,7 +717,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) #ifdef USE_CERT_PINNING // are we using HTTPS to download the RAPPS update package? check if the certificate is original if ((urlComponents.nScheme == INTERNET_SCHEME_HTTPS) && - (wcscmp(CurrentInfo.szUrl, APPLICATION_DATABASE_URL) == 0) && + (wcscmp(InfoArray[iAppId].szUrl, APPLICATION_DATABASE_URL) == 0) && (!CertIsValid(hOpen, urlComponents.lpszHostName))) { MessageBox_LoadString(hMainWnd, IDS_CERT_DOES_NOT_MATCH); @@ -752,7 +749,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) } dwCurrentBytesRead += dwBytesRead; - dl->OnProgress(dwCurrentBytesRead, dwContentLen, 0, CurrentInfo.szUrl.GetString()); + dl->OnProgress(dwCurrentBytesRead, dwContentLen, 0, InfoArray[iAppId].szUrl.GetString()); } while (dwBytesRead && !bCancelled); CloseHandle(hOut); @@ -763,7 +760,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) /* if this thing isn't a RAPPS update and it has a SHA-1 checksum verify its integrity by using the native advapi32.A_SHA1 functions */ - if (!bCab && CurrentInfo.szSHA1[0] != 0) + if (!bCab && InfoArray[iAppId].szSHA1[0] != 0) { ATL::CStringW szMsgText; @@ -775,7 +772,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) SendMessageW(GetDlgItem(hDlg, IDC_DOWNLOAD_STATUS), WM_SETTEXT, 0, (LPARAM) Path.GetString()); // this may take a while, depending on the file size - if (!VerifyInteg(CurrentInfo.szSHA1.GetString(), Path.GetString())) + if (!VerifyInteg(InfoArray[iAppId].szSHA1.GetString(), Path.GetString())) { if (!szMsgText.LoadStringW(IDS_INTEG_CHECK_FAIL)) goto end; @@ -786,7 +783,7 @@ DWORD WINAPI CDownloadManager::ThreadFunc(LPVOID param) } run: - DownloadsListView.SetDownloadStatus(iAppId, DOWNLOAD_STATUS::DLWaitingToInstall); + DownloadsListView.SetDownloadStatus(iAppId, DLSTATUS_WAITING_INSTALL); // run it if (!bCab) @@ -801,7 +798,7 @@ run: if (ShellExecuteExW(&shExInfo)) { - DownloadsListView.SetDownloadStatus(iAppId, DOWNLOAD_STATUS::DLInstalling); + DownloadsListView.SetDownloadStatus(iAppId, DLSTATUS_INSTALLING); //TODO: issue an install operation separately so that the apps could be downloaded in the background WaitForSingleObject(shExInfo.hProcess, INFINITE); CloseHandle(shExInfo.hProcess); @@ -825,10 +822,10 @@ end: DeleteFileW(Path.GetString()); } - DownloadsListView.SetDownloadStatus(iAppId, DOWNLOAD_STATUS::DLFinished); + DownloadsListView.SetDownloadStatus(iAppId, DLSTATUS_FINISHED); } - delete param; + delete static_cast(param); SendMessageW(hDlg, WM_CLOSE, 0, 0); return 0; } diff --git a/reactos/base/applications/rapps/misc.cpp b/reactos/base/applications/rapps/misc.cpp index 93a86a4e806..7a35440f4a6 100644 --- a/reactos/base/applications/rapps/misc.cpp +++ b/reactos/base/applications/rapps/misc.cpp @@ -324,14 +324,14 @@ BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg) } BOOL GetInstalledVersion_WowUser(ATL::CStringW* szVersionResult, - const ATL::CStringW& RegName, + const ATL::CStringW& szRegName, BOOL IsUserKey, REGSAM keyWow) { BOOL bHasSucceded = FALSE; ATL::CRegKey key; ATL::CStringW szVersion; - ATL::CStringW szPath = L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + RegName; + ATL::CStringW szPath = ATL::CStringW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%ls") + szRegName; if (key.Open(IsUserKey ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE, szPath.GetString(), @@ -389,7 +389,7 @@ ATL::CStringW CConfigParser::GetINIFullPath(const ATL::CStringW& FileName) ATL::CStringW szBuffer; GetStorageDirectory(szDir); - szBuffer.Format(L"%ls\\rapps\\%ls", szDir, FileName); + szBuffer.Format(L"%ls\\rapps\\%ls", szDir.GetString(), FileName.GetString()); return szBuffer; }