From 8f016669895c75a9c711d1584a632ae7c61074b0 Mon Sep 17 00:00:00 2001 From: Qiutong Shen Date: Mon, 22 Sep 2025 15:32:05 +0800 Subject: [PATCH] Fix MrmGetFilePathFromName regression for unpackaged apps - Added validation for MICROSOFT_WINDOWSAPPRUNTIME_BASE_DIRECTORY before use - Function now falls back to exe path if base directory is invalid/inaccessible - Prevents ERROR_FILE_NOT_FOUND when resources.pri doesn't exist in unpackaged scenarios - Restores WinAppSDK 1.7 behavior for XAML islands and unpackaged apps Fixes #18 --- dev/MRTCore/mrt/Core/src/MRM.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dev/MRTCore/mrt/Core/src/MRM.cpp b/dev/MRTCore/mrt/Core/src/MRM.cpp index cdf750cc..48177356 100644 --- a/dev/MRTCore/mrt/Core/src/MRM.cpp +++ b/dev/MRTCore/mrt/Core/src/MRM.cpp @@ -992,9 +992,15 @@ STDAPI MrmGetFilePathFromName(_In_opt_ PCWSTR filename, _Outptr_ PWSTR* filePath wil::unique_cotaskmem_string baseDir; if (SUCCEEDED(wil::TryGetEnvironmentVariableW(L"MICROSOFT_WINDOWSAPPRUNTIME_BASE_DIRECTORY", baseDir)) && baseDir) { - path.swap(baseDir); - RETURN_IF_FAILED(StringCchLengthW(path.get(), STRSAFE_MAX_CCH, &length)); - RETURN_IF_FAILED(SizeTAdd(length, 1, &bufferCount)); + // Validate that the base directory is accessible before using it + DWORD baseDirAttributes = GetFileAttributes(baseDir.get()); + if (baseDirAttributes != INVALID_FILE_ATTRIBUTES && (baseDirAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + path.swap(baseDir); + RETURN_IF_FAILED(StringCchLengthW(path.get(), STRSAFE_MAX_CCH, &length)); + RETURN_IF_FAILED(SizeTAdd(length, 1, &bufferCount)); + } + // If base directory is invalid, continue with the original exe path } filenameToUse = c_defaultPriFilename; }