获取metro风格应用程序的确切显示名称

本文关键字:显示 metro 风格 应用程序 获取 | 更新日期: 2023-09-27 17:58:15

我正在使用PackageManager类来列出系统中已安装的metro风格的应用程序。

PackageId。Name不返回包的实际名称,package也不返回。DisplayName。包裹DisplayName返回空字符串。它只返回Package的显示名称。现在的

当我尝试使用AppxManifest.xml时,无法从
获取显示名称软件包->属性->显示名称。

<Properties>
<DisplayName>ms-resource:///Resources/AppStoreName</DisplayName>
<PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
<Logo>Assets'WindowsIcons'StoreLogo.png</Logo>
</Properties>

在哪里可以获得metro风格应用程序的确切显示名称?

获取metro风格应用程序的确切显示名称

如果您已经有对Package实例的引用,则可以使用interop方法和注册表获取显示名称。这里有一个完整的例子:

using Microsoft.Win32;
using System;
using System.Runtime.InteropServices;
using System.Text;
using Windows.ApplicationModel;
public class PackageUtil
{
    [DllImport("shlwapi.dll", BestFitMapping = false, CharSet = CharSet.Unicode, 
        ExactSpelling = true, SetLastError = false, ThrowOnUnmappableChar = true)]
    private static extern int SHLoadIndirectString(string pszSource, 
        StringBuilder pszOutBuf, int cchOutBuf, IntPtr ppvReserved);
    private static string GetPackageDisplayName(Package package)
    {
        using (var key = Registry.ClassesRoot.OpenSubKey(
            @"Local Settings'Software'Microsoft'Windows'CurrentVersion'AppModel" + 
            $@"'Repository'Packages'{package.Id.FullName}'App'Capabilities"))
        {
            var sb = new StringBuilder(256);
            Shlwapi.SHLoadIndirectString((string)key.GetValue("ApplicationName"), 
                sb, sb.Capacity, IntPtr.Zero);
            return sb.ToString();
        }
    }
}