我正在使用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风格应用程序的确切显示名称?
答案 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();
}
}
}