diff --git a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Apps/Programs/UWPApplication.cs b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Apps/Programs/UWPApplication.cs index be973f3431..5ea2e42657 100644 --- a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Apps/Programs/UWPApplication.cs +++ b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Apps/Programs/UWPApplication.cs @@ -173,6 +173,25 @@ public class UWPApplication : IProgram return false; } + private static string TryLoadIndirectString(string source, Span buffer, string errorContext) + { + try + { + PInvoke.SHLoadIndirectString(source, buffer).ThrowOnFailure(); + + var len = buffer.IndexOf('\0'); + var loaded = len >= 0 + ? buffer[..len].ToString() + : buffer.ToString(); + return string.IsNullOrEmpty(loaded) ? string.Empty : loaded; + } + catch (Exception ex) + { + Logger.LogError($"Unable to load resource {source} : {errorContext} : {ex.Message}"); + return string.Empty; + } + } + internal unsafe string ResourceFromPri(string packageFullName, string resourceReference) { const string prefix = "ms-resource:"; @@ -221,28 +240,15 @@ public class UWPApplication : IProgram Span outBuffer = stackalloc char[1024]; var source = $"@{{{packageFullName}? {parsed}}}"; - try - { - PInvoke.SHLoadIndirectString(source, outBuffer).ThrowOnFailure(); + var loaded = TryLoadIndirectString(source, outBuffer, resourceReference); - var loaded = outBuffer.ToString(); - return string.IsNullOrEmpty(loaded) ? string.Empty : loaded; - } - catch (Exception) + if (!string.IsNullOrEmpty(loaded)) { - try - { - var sourceFallback = $"@{{{packageFullName}?{parsedFallback}}}"; - PInvoke.SHLoadIndirectString(sourceFallback, outBuffer).ThrowOnFailure(); - var loaded = outBuffer.ToString(); - return string.IsNullOrEmpty(loaded) ? string.Empty : loaded; - } - catch (Exception) - { - // ProgramLogger.Exception($"Unable to load resource {resourceReference} from {packageFullName}", new InvalidOperationException(), GetType(), packageFullName); - return string.Empty; - } + return loaded; } + + var sourceFallback = $"@{{{packageFullName}?{parsedFallback}}}"; + return TryLoadIndirectString(sourceFallback, outBuffer, $"{resourceReference} (fallback)"); } else {