Обзор. Можно ли изменить идентификатор пакета приложения после компиляции с помощью makeappx.exe?
У меня есть приложение для магазина Windows (для боковой загрузки LOB, а не для магазина), для которого мне нужно создать несколько копий (вариантов/экземпляров), потому что мне нужно иметь возможность устанавливать и запускать несколько версий приложения одновременно. как один пользователь. Скажем, мое приложение называется MyMultiInstanceApp, я хочу клонировать его в два приложения с именами MyMultiInstanceApp-Prod и MyMultiInstanceApp-Test, потому что, имея их, я могу установить и запустить приложение *-Prod в версии 1.0 и приложение *-Test в версии 1.1. одновременно.
Я могу добиться этого, создав несколько сборок в Visual Studio и изменив идентификатор пакета (имя) в манифесте перед каждой сборкой, как описано в Локальное развертывание параллельных версий приложения Магазина Windows.
Однако я хотел бы сделать это после сборки, сделав копии на основе исходного пакета .appx, и у меня это почти работает с использованием makeappx.exe и signtool.exe, но после установки, например. MyMultiInstanceApp-Test, приложение зависает при запуске.
Мой подход следующий:
1) Создайте исходный файл .appx, создав решение в VS или через msbuild.
2) Распакуйте приложение, используя:
makeappx.exe unpack /p MyMultiInstanceApp.appx /d unpacked
3) Измените идентификатор пакета в AppxManifest.xml следующим образом:
<Identity Name="MyMultiInstanceApp-Test" Publisher="CN=JohnDoe" Version="1.1.0.0" ProcessorArchitecture="neutral" />
<Properties>
<DisplayName>MyMultiInstanceApp-Test</DisplayName>
...
4) Переупакуйте приложение, используя:
makeappx.exe pack /d unpacked /p MyMultiInstanceApp-Test.appx
5) Подпишите пакет, используя тот же сертификат, который использовался для исходного пакета, используя:
signtool.exe sign /a /v /fd SHA256 /f MyCert.pfx MyMultiInstanceApp-Test.appx
Установка нового MultiInstanceApp-Test.appx вроде прошла успешно, но при попытке запустить - просто зависает и в Event Viewer под записью видно следующее:
\Журналы приложений и служб\Microsoft\Windows\Apps\Microsoft-Windows-TWinUI/Operational:
[ИНФОРМАЦИЯ] Попытка активации приложения MyMultiInstanceApp-Test_pf28w44wh44hy!App. Состояние выполнения: Попытка активации приложения, 0, Операция успешно завершена.
[ОШИБКА] Активация приложения MyMultiInstanceApp-Test_pf28w44wh44hy!App для контракта Windows.Launch завершилась ошибкой: не удалось выполнить удаленный вызов процедуры.
Я что-то упустил или изменение идентификатора пакета невозможно после компиляции?
Identity.Name
является причиной этой ошибки. Только изменениеDisplayName
в порядке. Я знаю, что это не решает вашу проблему, но я просто хотел добавить это наблюдение. Я предполагаю, что идентификационное имя каким-то образом записано в некоторые двоичные файлы в пакете appx, но я пока не смог найти никаких подробностей об этом. - person Lasse Christiansen   schedule 25.08.2015