2016-10-07 1 views
1

J'essaie de convertir mon application Win32 en une application UWP en utilisant le convertisseur Project Centennial (ie Desktop Bridge).Comment structurer correctement les icônes de l'application UWP dans le fichier AppxManifest.xml pour une application Win32 convertie en utilisant Desktop Bridge (Project Centennial)

Après l'application est converti, je dois ajuster AppxManifest.xml fichier pour vérifier les points suivants:

  • Que tous les formats d'icônes sont correctement configurés.

  • Que j'ai correctement spécifié les ressources de l'application pour: l'anglais (US), l'allemand, le français et le russe.

Je suivis this Windows 10 icon guide et a créé les .png images suivantes qui ont tous été placés dans le dossier Assets. Je suis arrivé ces:

enter image description here

Et mon AppxManifest.xml était structuré comme tel:

<?xml version="1.0" encoding="utf-8"?> 
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"> 
    <Identity Name="MyApp.Name" ProcessorArchitecture="x86" Publisher="CN=My Name, O=My Name, STREET=&quot;Street Address&quot;, L=City, S=State, PostalCode=12345, C=US" Version="1.2.3.4" /> 
    <Properties> 
    <DisplayName>MyApp.Name</DisplayName> 
    <PublisherDisplayName>PublisherName</PublisherDisplayName> 
    <Logo>Assets\StoreLogo-50x50.png</Logo> 
    </Properties> 
    <Resources> 
    <Resource Language="en-us" /> 
    <Resource Language="de-DE" /> 
    <Resource Language="fr-FR" /> 
    <Resource Language="ru-RU" /> 
    </Resources> 
    <Dependencies> 
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14342.0" MaxVersionTested="10.0.14342.0" /> 
    </Dependencies> 
    <Capabilities> 
    <rescap:Capability Name="runFullTrust" /> 
    </Capabilities> 
    <Applications> 
    <Application Id="MyApp.Name" Executable="VFS\Users\ContainerAdministrator\AppData\Local\PublisherName\App Name\RunFile.exe" EntryPoint="Windows.FullTrustApplication"> 
     <uap:VisualElements DisplayName="My App Name" Description="My app does this ... and this ..." 
          BackgroundColor="#aabbcc" 
          Square71x71Logo="Assets\AppNameSmallTile.png" 
          Square150x150Logo="Assets\AppNameMedTile.png" 
          Square310x150Logo="Assets\AppNameWideTile.png" 
          Square310x310Logo="Assets\AppNameLargeTile.png" 
          Square44x44Logo="Assets\AppNameAppList.png" 
          > 
     <uap:DefaultTile> 
      <uap:ShowNameOnTiles> 
      <uap:ShowOn Tile="square150x150Logo" /> 
      <uap:ShowOn Tile="Square310x150Logo" /> 
      <uap:ShowOn Tile="Square310x310Logo" /> 
      </uap:ShowNameOnTiles> 
     </uap:DefaultTile> 
     </uap:VisualElements> 
     <Extensions /> 
    </Application> 
    </Applications> 
</Package> 

Alors quelqu'un peut-il répondre à ces questions:

  1. Je suis un peu confus sur la spécification des icônes pour les tailles et la mise à l'échelle correctes. Est-ce que je l'ai fait correctement?

  2. Ai-je besoin de spécifier la mise à l'échelle pour l'icône Assets\StoreLogo-50x50.png? Et enfin, ai-je spécifié correctement les ressources pour 4 langues différentes?

EDIT: En attendant, j'ai essayé de compiler mon AppxManifest.xml ci-dessus avec les actifs que je montrais. Mais l'outil makeappx.exe me donne l'erreur suivante:

MakeAppx : error: Error info: error C00CE015: App manifest validation error: The app manifest must be valid as per schema: Line 22, Column 27, Reason: The attribute 'Square71x71Logo' on the element '{ http://schemas.microsoft.com/appx/manifest/uap/windows10 }VisualElements' is not defined in the DTD/Schema.

Il ne évidemment pas comme les tailles d'icônes suivantes:

Square71x71Logo 
Square310x150Logo 
Square310x310Logo 

Mais même si je supprime les tailles d'icônes ci-dessus de AppxManifest.xml, lorsque je tente de l'emballer avec la commande suivante:

"C:\Program Files (x86)\Windows Kits\10\bin\x64\makeappx.exe" pack /d "path-to-folder-to-pack" /p "path-to\MyAppxPackage.appx" 

Je reçois les erreurs suivantes sur les noms actifs pour mise à l'échelle:

MakeAppx : error: Manifest validation error: Line 22, Column 27, Reason: The file name "Assets\AppNameMedTile.png" declared for element "[local-name()='Applications']/[local-name()='Application']/[local-name()='VisualElements']" doesn't exist in the package. If this file has multiple variations or resource versions for language, scale, contrast, etc., use the /l command line option to disable this validation. MakeAppx : error: Manifest validation error: Line 23, Column 27, Reason: The file name "Assets\AppNameAppList.png" declared for element "[local-name()='Applications']/[local-name()='Application']/[local-name()='VisualElements']" doesn't exist in the package. If this file has multiple variations or resource versions for language, scale, contrast, etc., use the /l command line option to disable this validation. MakeAppx : error: Package creation failed. MakeAppx : error: 0x80080204 - The specified package format is not valid: The package manifest is not valid.

suggéré commande /l Utilisation en tant que tel:

"C:\Program Files (x86)\Windows Kits\10\bin\x64\makeappx.exe" pack /l /d "path-to-folder-to-pack" /p "path-to\MyAppxPackage.appx" 

construit le paquet avec beaucoup d'avertissements. Mais quand je l'installerai plus tard, toutes les icônes semblent vides.

Il doit y avoir quelque chose qui me manque ici?

+0

Je m'intéresse à la question # 3 ... – m02ph3u5

Répondre

2

Je vois deux problèmes principaux: vous définissez des images de tuiles au mauvais endroit, et vous ne parlez pas du tout d'un fichier resources.pri.

Le schéma UAP est assez impliqué, mais également raisonnablement bien documenté, alors assurez-vous de respecter ses exigences. En particulier, le uap:VisualElements element a seulement les attributs d'image Square150x150Logo et Square44x44Logo. Si vous voulez définir d'autres tailles, elles vont dans les attributs d'un enfant uap:DefaultTile element. Notez que vos attributs uap:ShowOn elements' incluent un Square310x150Logo incorrect qui devrait plutôt être wide310x150Logo. Une fois le tri effectué, makeappx devrait réussir avec votre ligne de commande d'origine, c'est-à-dire sans le paramètre supplémentaire /l.

Cependant, cela ne suffit pas pour faire apparaître vos images DPI alternatives. Pour cela, vous devrez créer un fichier resources.pri. Vous pouvez le faire manuellement en utilisant makepri.exe pour créer un modèle priconfig.xml, le mettre à jour, puis invoquer à nouveau makepri pour y construire le fichier resources.pri.

Vous pouvez également utiliser un outil qui créera un package d'application avec un fichier resources.pri pour vous (tel que Visual Studio), extraire le fichier resources.pri et l'ajouter à votre package. Assurez-vous simplement que les emplacements que vous utilisez dans votre package correspondent à ceux du package créé par l'outil, car les chemins relatifs sont stockés dans le fichier resources.pri. (En bonus, vous pouvez regarder le fichier AppxManifest.xml que cela crée pour vérifier que votre structure de la première partie est correcte.N'oubliez pas que les applications utilisant le pont de bureau auront des espaces de noms et des capacités supplémentaires que Visual Studio a gagné ' t offre.)

+0

Merci pour votre contribution. Vous voyez, bien que j'utilise VS pour créer ce projet, il s'agit à l'origine d'une solution C++, donc aucun élément UWP n'est inclus. J'ai dérivé le 'AppxManifest.xml' résultant en utilisant Microsoft [convertisseur de pont de bureau] (https://developer.microsoft.com/en-us/windows/bridges/desktop) à partir d'un programme d'installation MSI pour une application Win32. – c00000fd

+0

Droite; cela ne devrait pas être un problème. Juste pour clarifier, le paragraphe "Alternately ..." est conçu comme une alternative à la création des ressources. Je suggère toujours de corriger votre AppxManifest manuellement. (Bien que vous puissiez totalement croiser le VS créé pour confirmer votre structure, je vais ajouter cette idée à la réponse.) –