2016-07-22 12 views
1

Ich verwende die Klasse PackageManager, um die installierten Anwendungen im Metro-Stil im System aufzulisten.Ermitteln des genauen Anzeigenamens der Apps im U-Bahn-Stil

PackageId.Name gibt nicht den tatsächlichen Namen des Pakets zurück, Weder ist Package.DisplayName. Package.DisplayName gibt eine leere Zeichenfolge zurück. Der Anzeigename wird nur für Package.Current zurückgegeben.

Als ich versuchte, AppxManifest.xml zu verwenden, konnte ich den Anzeigenamen von
Package-> Eigenschaften-> Displayname auch nicht erhalten.

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

Woher bekomme ich den genauen Anzeigenamen von Metro-Anwendungen?

Antwort

0

Wenn Sie bereits eine Referenz auf eine Package Instanz haben, können Sie den Anzeigenamen mithilfe einer Interop-Methode und der Registrierung abrufen. Hier ist ein komplettes Beispiel:

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