Исправление масштабированных изображений в манифесте AppX, сгенерированном Destop 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">

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

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
    

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


person Martin Prikryl    schedule 10.02.2017    source источник
comment
Кстати, Мартин, для OSS у нас есть программа, которая дает вам доступ к бесплатной лицензии нашей топовой коммерческой версии, если вам это интересно. advancedinstaller.com/free-license.html   -  person Bogdan Mitrache    schedule 14.02.2017
comment
Makeappx может использовать переключатель /l, чтобы игнорировать элементы .scale... в каждом файле. Затем вы можете собрать с помощью makeappx.   -  person chris84948    schedule 30.04.2017


Ответы (4)


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

person herman.smn    schedule 13.02.2017
comment
Спасибо. Но это не ответ Какие пути я должен использовать в манифесте...? - person Martin Prikryl; 13.02.2017

Если вам нужно внести ручные изменения в свои ресурсы и перестроить файл 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

person Stefan Wick MSFT    schedule 30.04.2017
comment
Спасибо за Ваш ответ! Я посмотрю в ближайшее время и предоставлю обратную связь. - person Martin Prikryl; 02.05.2017

Вероятно, это был какой-то сбой в более ранних версиях makeappx.

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


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

person Martin Prikryl    schedule 06.06.2018

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

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

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

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

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

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

Я создал новый пакет 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, [email protected]" 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>

person Bogdan Mitrache    schedule 13.02.2017
comment
Спасибо. Правда, он преобразовывал значки лучше, чем Desktop App Converter. Но с другой стороны нет масштабированных версий иконок. - person Martin Prikryl; 14.02.2017
comment
Расширенный установщик имеет набор специальных представлений, которые позволяют нашим пользователям настраивать ресурсы пакета перед сборкой приложения, как вы можете видеть на изображениях выше. Маленькие и средние значки являются обязательными, поэтому мы их генерируем, как это делает MSFT (они также пытаются генерировать другие размеры). Однако рекомендуется создавать свои собственные значки и использовать их вместо автоматически сгенерированных, поскольку процесс преобразования нельзя сравнивать с оригинальными источниками ICO. - person Bogdan Mitrache; 14.02.2017
comment
Спасибо. Хотя это не помогло мне получить ответ на мой вопрос. Я вижу, что манифест, сгенерированный расширенным установщиком, ссылается на 100% версию значков. Если я добавляю значки с более высоким разрешением, они добавляются в подпапку Assets. Но ссылки на них нет ни в манифесте, ни в файлах .pri (в отличие от конвертера настольных приложений). После дальнейшего тестирования Advanced Installer перестал работать. Он выдает ошибки нарушения доступа и другие загадочные сообщения, поэтому я сдался. - person Martin Prikryl; 15.02.2017
comment
Я отредактировал сообщение выше, добавив новый образец appx и некоторые файлы манифеста и pri, в которых перечислены все изображения. Они сгенерированы с помощью AI версии 13.6, которая будет выпущена на этой неделе (те, что из версии 13.5, должны выглядеть одинаково). Не могли бы вы отправить мне файл проекта, для которого вы получили нарушение прав доступа на [email protected]? - person Bogdan Mitrache; 15.02.2017