2016-07-22 5 views
1

PackageManagerクラスを使用して、システムにインストールされているメトロスタイルアプリケーションを一覧表示しています。メトロスタイルアプリの正確な表示名を取得する

PackageId.Name実際のパッケージ名は返されません。どちらもPackage.DisplayNameです。 Package.DisplayNameは空の文字列を返します。 Package.Currentの表示名のみを返します。

私はAppxManifest.xmlを使用しようとしたときに、表示名を
パッケージ - >プロパティ - >表示名から取得できませんでした。

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

メトロスタイルアプリケーションの正確な表示名はどこで取得できますか?

答えて

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" + 
      [email protected]"\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(); 
     } 
    } 
} 
関連する問題