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

时间:2016-07-22 09:57:39

标签: c# .net microsoft-metro windows-10

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

PackageId.Name不会返回包的实际名称,也不会返回Package.DisplayName。 Package.DisplayName返回空字符串。它只返回Package.Current的显示名称。

当我尝试使用AppxManifest.xml时,我无法从中获取显示名称 Package-> Properties-> Displayname。

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

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

1 个答案:

答案 0 :(得分:0)

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

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();
        }
    }
}