Исправление масштабированных изображений в манифесте AppX, сгенерированном Destop App Converter

Я использовал Desktop App Converter, чтобы конвертировать мое приложение Win32 в .appx,

Конвертер не смог правильно конвертировать иконки приложений. Прозрачность иконки была потеряна. Хотя я сообщил об этом (ошибка?) В Microsoft, я хотел бы попытаться преобразовать значки вручную. И я хочу создать .appx вручную (используя makeappx) в конце концов все равно. Так что мне нужно создать AppxManifest.xml,


Проблема в том, что AppxManifest.xml сгенерированный Конвертером Настольных приложений недопустим. Все пути к изображениям указывают на несуществующие файлы:

<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">
  ...
  <Properties>
    ...
    <Logo>Assets\AppStoreLogo.png</Logo>
  </Properties>
  <Resources>
    <Resource Language="en-us" />
    <Resource uap:Scale="100" />
    <Resource uap:Scale="125" />
    <Resource uap:Scale="150" />
    <Resource uap:Scale="200" />
    <Resource uap:Scale="400" />
  </Resources>
  ...
  <Applications>
    <Application Id="WinSCP" Executable="WinSCP.exe" EntryPoint="Windows.FullTrustApplication">
      <uap:VisualElements DisplayName="WinSCP" Description="WinSCP" BackgroundColor="transparent" Square150x150Logo="Assets\AppMedTile.png" Square44x44Logo="Assets\AppList.png">
        <uap:DefaultTile Wide310x150Logo="Assets\AppWideTile.png" Square310x310Logo="Assets\AppLargeTile.png" Square71x71Logo="Assets\AppSmallTile.png">

Там нет файлов, как AppStoreLogo.png (и т. д.) в Assets папки, есть файлы, такие как:

AppStoreLogo.scale-100.png
AppStoreLogo.scale-125.png
AppStoreLogo.scale-150.png
AppStoreLogo.scale-200.png
AppStoreLogo.scale-400.png

Итак makeappx не может генерировать .appx используя сгенерированный манифест.

Хотя я, очевидно, могу исправить манифест, указав пути к scale-100 Вариант изображения, я чувствую, что это не правильный путь.

Масштабированные изображения являются причиной, конечно.


Я могу видеть эти изображения и масштабировать связанные элементы:

  • Там есть <Resources> элемент в манифесте, который перечисляет все шкалы.

  • Это также resources.*.pri файлы, которые ссылаются на масштабированные изображения.

    resources.pri
    resources.scale-100.pri
    resources.scale-125.pri
    resources.scale-150.pri
    resources.scale-200.pri
    

Но я не понимаю, как все это сочетается. Какие пути я должен использовать в манифесте для поддержания масштабированных изображений?

4 ответа

Решение

Это было, вероятно, какой-то глюк в более ранних версиях makeappx,

При попытке через год снова, makeappx Теперь можно скомпилировать AppxManifest.xml генерируется Desktop App Converter, хотя кажется, что он примерно такой же, как и раньше.


(Desktop App Converter по-прежнему не может правильно генерировать значки приложений).

Все значки объединяются в файл.PRI, который должен присутствовать в пакете и генерироваться для этих ресурсов. Вы можете попробовать использовать makepri для выгрузки файлов.PRI в формат XML и просмотра их содержимого.

Если вам необходимо вручную внести изменения в свои ресурсы и перестроить свои resources.pri, обратитесь к этому техническому документу и образцу:

https://docs.microsoft.com/en-us/windows/uwp/globalizing/using-mrt-for-converted-desktop-apps-and-games

https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/DotNetSatelliteAssemblyDemo

Однако самый простой способ управления визуальными активами для пакета приложения - использовать редактор манифеста пакета в Visual Studio 2017.

Чтобы использовать его для преобразованного приложения, создайте пустой проект UWP и добавьте выходные данные преобразования (включая ваш манифест appx) в этот проект. Теперь вы можете использовать редактор для управления визуальными ресурсами, создавать пакеты для отправки в магазин и многое другое. Вот документ, описывающий процесс: https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-packaging-dot-net

Спасибо, Стефан Вик - Платформа разработчика Windows

Мне удалось преобразовать установщик WinSCP в пакет AppX с помощью Advanced Installer.

По этой ссылке вы можете скачать пакет с правильными значками из того, что я заметил. Просто извлеките содержимое пакета и проверьте пути в манифесте.

Вы также можете установить и протестировать приложение с помощью этого пакета, сначала установите самозаверяющий сертификат, с которым приложение было подписано. (в ВМ конечно)

Настройка ресурсов вашего пакета:

введите описание изображения здесь

введите описание изображения здесь

Я создал новый пакет appx, который содержит больше ресурсов для разных размеров. Вы можете скачать его по ссылке выше, я обновил источник.

Чтобы получить содержимое PRI, вам нужно выполнить команду: makepri.exe dump

Вот содержимое resources.pri.xml из нового пакета:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PriInfo>
 <ResourceMap name="MartinPrikryl.WinSCP" version="1.0" primary="true">
  <Qualifiers>
   <AlternateForm>UNPLATED</AlternateForm>
   <Scale>100,125,150,200,400</Scale>
   <TargetSize>256,48</TargetSize>
  </Qualifiers>
  <ResourceMapSubtree name="Files">
   <ResourceMapSubtree name="Assets">
    <NamedResource name="Store50x50Logo.png" uri="ms-resource://MartinPrikryl.WinSCP/Files/Assets/Store50x50Logo.png">
     <Candidate qualifiers="Scale-400" isDefault="true" type="Path">
      <Value>Assets\Store50x50Logo.scale-400.png</Value>
     </Candidate>
     <Candidate qualifiers="Scale-200" isDefault="true" type="Path">
      <Value>Assets\Store50x50Logo.scale-200.png</Value>
     </Candidate>
     <Candidate qualifiers="Scale-150" isDefault="true" type="Path">
      <Value>Assets\Store50x50Logo.scale-150.png</Value>
     </Candidate>
     <Candidate qualifiers="Scale-125" isDefault="true" type="Path">
      <Value>Assets\Store50x50Logo.scale-125.png</Value>
     </Candidate>
     <Candidate qualifiers="Scale-100" isDefault="true" type="Path">
      <Value>Assets\Store50x50Logo.scale-100.png</Value>
     </Candidate>
    </NamedResource>
    <NamedResource name="WinSCPSquare150x150Logo.png" uri="ms-resource://MartinPrikryl.WinSCP/Files/Assets/WinSCPSquare150x150Logo.png">
     <Candidate qualifiers="Scale-125" isDefault="true" type="Path">
      <Value>Assets\WinSCPSquare150x150Logo.scale-125.png</Value>
     </Candidate>
    </NamedResource>
    <NamedResource name="WinSCPSquare310x310Logo.png" uri="ms-resource://MartinPrikryl.WinSCP/Files/Assets/WinSCPSquare310x310Logo.png">
     <Candidate qualifiers="Scale-100" isDefault="true" type="Path">
      <Value>Assets\WinSCPSquare310x310Logo.scale-100.png</Value>
     </Candidate>
    </NamedResource>
    <NamedResource name="WinSCPSquare44x44Logo.png" uri="ms-resource://MartinPrikryl.WinSCP/Files/Assets/WinSCPSquare44x44Logo.png">
     <Candidate qualifiers="TargetSize-48" isDefault="true" type="Path">
      <Value>Assets\WinSCPSquare44x44Logo.targetsize-48.png</Value>
     </Candidate>
     <Candidate qualifiers="TargetSize-256, AlternateForm-UNPLATED" type="Path">
      <Value>Assets\WinSCPSquare44x44Logo.targetsize-256_altform-unplated.png</Value>
     </Candidate>
    </NamedResource>
    <NamedResource name="WinSCPSquare71x71Logo.png" uri="ms-resource://MartinPrikryl.WinSCP/Files/Assets/WinSCPSquare71x71Logo.png">
     <Candidate qualifiers="Scale-100" isDefault="true" type="Path">
      <Value>Assets\WinSCPSquare71x71Logo.scale-100.png</Value>
     </Candidate>
    </NamedResource>
    <NamedResource name="WinSCPWide310x150Logo.png" uri="ms-resource://MartinPrikryl.WinSCP/Files/Assets/WinSCPWide310x150Logo.png">
     <Candidate qualifiers="Scale-100" isDefault="true" type="Path">
      <Value>Assets\WinSCPWide310x150Logo.scale-100.png</Value>
     </Candidate>
    </NamedResource>
   </ResourceMapSubtree>
  </ResourceMapSubtree>
 </ResourceMap>
</PriInfo>

Вот манифест:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" IgnorableNamespaces="uap rescap" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities">
  <Identity Name="MartinPrikryl.WinSCP" ProcessorArchitecture="x64" Publisher="CN=Caphyon-sha2, OU=AdvancedInstaller, O=Caphyon, E=support@caphyon.net" Version="5.9.3.7136"/>
  <Applications>
    <Application Id="WinSCP" Executable="VFS\ProgramFilesX86\WinSCP\WinSCP.exe" EntryPoint="Windows.FullTrustApplication">
      <uap:VisualElements DisplayName="WinSCP" Description="WinSCP" BackgroundColor="transparent" Square150x150Logo="Assets\WinSCPSquare150x150Logo.png" Square44x44Logo="Assets\WinSCPSquare44x44Logo.png">
        <uap:InitialRotationPreference>
          <uap:Rotation Preference="portrait"/>
          <uap:Rotation Preference="landscape"/>
        </uap:InitialRotationPreference>
        <uap:DefaultTile Square310x310Logo="Assets\WinSCPSquare310x310Logo.png" Square71x71Logo="Assets\WinSCPSquare71x71Logo.png" Wide310x150Logo="Assets\WinSCPWide310x150Logo.png"/>
      </uap:VisualElements>
    </Application>
  </Applications>
  <Resources>
    <Resource Language="en-US"/>
  </Resources>
  <Capabilities>
    <rescap:Capability Name="runFullTrust"/>
  </Capabilities>
  <Properties>
    <DisplayName>WinSCP</DisplayName>
    <PublisherDisplayName>Martin Prikryl</PublisherDisplayName>
    <Logo>Assets\Store50x50Logo.png</Logo>
  </Properties>
  <Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0"/>
  </Dependencies>
</Package>

Другие вопросы по тегам