2017-02-10 14 views
4

Я использовал конвертер рабочего стола для преобразования моего приложения Win32 в .appx.Фиксация масштабированных изображений в манифесте AppX, сгенерированном Destop App Converter

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


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

<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 
    

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

+0

Кстати Мартин, для ОСС у нас есть программа, которая дает вам доступ к бесплатной лицензии наших лучших коммерческих если вам интересно. http://www.advancedinstaller.com/free-license.html –

+0

Makeappx может использовать переключатель/l для игнорирования содержимого .scale ... в каждом файле. Затем вы можете создать с помощью makeappx. – chris84948

ответ

0

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

+0

Спасибо. Но это не ответ * «Какие пути я должен использовать в манифесте ...?» * –

-1

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

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

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

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

enter image description here

enter image description here

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

Чтобы получить содержимое ПОИ вам необходимо выполнить команду: makepri.exe дамп

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

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

+0

Спасибо. Правда, он конвертировал значки лучше, чем Desktop App Converter. Но, с другой стороны, нет масштабированных версий значков. –

+0

Усовершенствованный установщик имеет набор выделенных представлений, которые позволяют нашим пользователям настраивать ресурсы пакета, прежде чем они создадут приложение, как вы можете видеть на изображениях выше. Маленькие и средние значки являются обязательными, поэтому мы их генерируем, как это делает MSFT (они также пытаются генерировать другие размеры). Однако рекомендуется создавать собственные значки и использовать их вместо тех, которые генерируются автоматически, поскольку процесс преобразования не может сравниться с исходными источниками ICO. –

+0

Спасибо. Хотя это не помогло мне получить ответ на мой вопрос.Я вижу, что манифест, созданный расширенным установщиком, ссылается на 100% версию значков. Если я добавляю значки более высокого разрешения, они добавляются в подпапку «Активы». Но в манифесте нет ссылок на них, а не на файлы .pri (вопреки конвертеру приложений для настольных компьютеров). После дальнейшего тестирования Advanced Installer перестает работать. Это дает ошибки «нарушения прав доступа» и другие загадочные сообщения, поэтому я сдался. –

0

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

enter image description here

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

Спасибо, Stefan Wick - Windows Developer Platform

+0

Спасибо за ваш ответ! Я скоро загляну в нее и предоставит обратную связь. –