Переход пользователей из веб-приложения с распаковки в упакованое приложение Store
Если приложение распространяется как в виде веб-загрузки (EXE /MSI), так и в Магазине как упакованое приложение (MSIX), возможно, потребуется запретить пользователям устанавливать обе версии или переносить пользователей из непакованной веб-версии в версию Магазина. В этом руководстве содержатся инструкции по плавному переходу пользователей из распаковаемой версии на упаковаемую.
Ниже описаны два сценария:
- Пользователь уже установил веб-версию распаковки, и вы хотите заменить ее пакетной версией Магазина.
- Пользователь уже установил обе версии, и вы хотите предоставить приоритет пакетной версии Store и удалить веб-версию распаковки.
Сценарий 1. Автоматическое обновление веб-распаковки приложения на упакованое приложение Store
Если вы стремитесь автоматически перенести пользователей из веб-распаковки приложения в упаковаемую версию Магазина, рекомендуется выполнить следующие действия.
- Чтобы приложение, упакованое в Магазин, использовало существующую панель задач и меню закрепление, обеспечивая сохранение ярлыков, когда приложение, упакованое в Магазин, заменяет веб-приложение без упаковки.
- Скачайте и установите автоматически версию Store из непакованной веб-версии.
- Укажите пользователям, что приложение перезагрузится для применения обновления
- После скачивания и установки запустите пакетную версию Store и закройте веб-распаковку версии.
- В упакованом приложении Store перенесите данные в новую папку данных приложения.
- См. раздел: перенос данных
- Наконец, программно удалите распаковку веб-версию.
Сценарий 2. Удалите веб-приложение с распаковками, если пользователь установил обе версии.
Вы можете разрешить пользователям использовать обе версии приложения параллельно, но вам придется управлять конфликтами между приложением и отвечать за синхронизацию данных между 2 версиями.
Если вы предпочитаете использовать только 1 версию и приоритеты версии Магазина, ниже приведены некоторые рекомендации.
- Чтобы приложение, упакованое в Магазин, использовало существующую панель задач и меню закрепление, обеспечивая сохранение ярлыков, когда приложение, упакованое в Магазин, заменяет веб-приложение без упаковки.
- Приложение Store должно определить, присутствует ли непакованная версия и удалите ее при запуске.
- Когда пользователи запускают распаковку приложения, вы автоматически запустите упаковаемую версию.
- Потенциально перенести данные, если вы хотите
- См. раздел: перенос данных
- Наконец, программно удалите распаковку веб-версию.
Технические рекомендации
Установка упаковаемого приложения Store из веб-приложения с распаковки
Чтобы инициировать скачивание и установку, необходимо знать идентификатор магазина приложения. Этот 12-символьный идентификатор можно получить из Центра партнеров, в частности в разделе "Удостоверение продукта", даже если ваше приложение еще не отправлено.
Впоследствии можно использовать следующий код для автоматического скачивания и установки приложения Store. Этот код будет:
- При наличии назначьте право текущему пользователю Магазина; в противном случае право будет связано с устройством.
- Инициируйте скачивание и установку продукта, не создавая всплывающие уведомления.
- Вы можете отслеживать ход загрузки и установки с помощью API событий.
private async Task<bool> DownloadStoreVersionAsync()
{
var productId = "<Product Id from Partner Center>";
var applicationName = "<name of your application>";
var appInstallManager = new AppInstallManager();
var entitlement = await appInstallManager.GetFreeUserEntitlementAsync(productId, string.Empty, string.Empty);
if (entitlement.Status is GetEntitlementStatus.NoStoreAccount)
{
entitlement = await appInstallManager.GetFreeDeviceEntitlementAsync(productId, string.Empty, string.Empty);
}
if (entitlement.Status is not GetEntitlementStatus.Succeeded)
{
return false;
}
var options = new AppInstallOptions()
{
LaunchAfterInstall = true,
CompletedInstallToastNotificationMode = AppInstallationToastNotificationMode.NoToast
};
var items = await appInstallManager.StartProductInstallAsync(productId, string.Empty, applicationName, string.Empty, options);
var firstItem = items.FirstOrDefault();
if(firstItem is null)
{
return false;
}
firstItem.StatusChanged += StoreInstallation_StatusChanged;
firstItem.Completed += StoreInstallation_Completed;
return true;
}
private void StoreInstallation_Completed(AppInstallItem sender, object args)
{
// Launch the new Store version when ready and close this application
// The Store version will then be responsible of migrating the data and uninstall the unpackaged version
}
private void StoreInstallation_StatusChanged(AppInstallItem sender, object args)
{
var status = sender.GetCurrentStatus();
switch(status.InstallState)
{
case AppInstallState.Installing:
{
// Show installing status
}
break;
case AppInstallState.Downloading:
{
// Show download progress using status.PercentComplete
}
break;
...
}
Запуск приложения Store из веб-приложения с распаковки
Чтобы запустить приложение Store, необходимо знать его AMUID, который состоит из семейства пакетов (найденных в разделе "Удостоверение продукта" Центра партнеров) и идентификатор приложения (от appxmanifest), разделенный восклицательным знаком (!).
Process.Start(
"explorer.exe",
"shell:AppsFolder\\Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
);
Как определить, установлена ли пакетная версия Store и запустить ее.
Вы можете определить, установлена ли упаковаемая версия приложения с помощью API GetPackagesByPackageFamily win32 и передачи имени семейства пакетов упаковаемого приложения. Если значение счетчика выше нуля, оно указывает, что приложение установлено.
Удаление веб-приложения с распаковки из упаковаемого приложения
Чтобы получить абсолютный путь к средству удаления, вы можете получить доступ к реестру.
Сведения об удалении находятся в реестре по адресу:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<your product code GUID\>
Получите полную команду в значении UninstallString
и выполните ее.
Рекомендуется автоматически выполнить удаление или сообщить пользователю о переносе данных и удалении другого приложения.
Перенос данных
Ваше распаковка приложения, скорее всего, хранит локальные данные в:
%localAppData%/<YourPublisherName\>/<YourAppName\>
Упакованные приложения имеют зарезервированное пространство для хранилища данных, которое автоматически удаляется при удалении приложения. Настоятельно рекомендуется (хотя и не обязательно) перенести данные в это пространство при первом запуске. Абсолютный путь к этой папке можно получить, вызвав Windows.Storage.ApplicationData.Current.LocalFolder.Path.
Перенос приобретений и покупок в приложении
Покупки из приложения
Для обеспечения оптимального взаимодействия с пользователем важно, чтобы пользователи могли легко получить доступ к содержимому, приобретенному в распаковке версии приложения. С этой целью Microsoft Store увеличил свою гибкость для издателей, разрешая использовать собственные или сторонние коммерческие платформы в дополнение к Microsoft с июня 2021 года.
Мы настоятельно рекомендуем издателям продолжать проверять права покупки в приложении, как выполнено в распаковке версии приложения, а также интегрировать с платформой Microsoft Commerce, чтобы пользователи могли легко приобрести содержимое с помощью нескольких щелчков в Windows.
Разрешить платным пользователям распаковки приложения перенестися в упаковаемую версию.
Если пользователи приобрели свой продукт на веб-сайте, им не придется платить еще раз, чтобы скачать упаковаемую версию из Магазина. Чтобы обеспечить простой переход, рекомендуется использовать следующие подходы:
- Предложить бесплатную или демонстрационную версию продукта, позволяя пользователям разблокировать полную версию с помощью покупок в приложении. Для пользователей, которые уже заплатили на веб-сайте, разрешите им получить доступ к полной версии, выполнив вход, чтобы проверить свои лицензии или ввести ключ лицензии в пользовательском интерфейсе приложения.
- Настройте приложение как платное предложение, но распределите код купона для существующих пользователей через собственные каналы. Эти коды позволят им скачать версию Магазина без дополнительных затрат. Дополнительные сведения см. в разделе "Создание рекламных кодов".
Как перенести существующие закрепленные панели задач и сочетания клавиш меню "Пуск"
Пользователи могут закрепить классическое приложение на панели задач или меню . Эти сочетания клавиш можно направлять в новое упаковаемое приложение, включив расширение windows.desktopAppMigration в манифест приложения.
Пример
xmlns:rescap3="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities/3"
...
<Extensions>
<rescap3:Extension Category="windows.desktopAppMigration">
<rescap3:DesktopAppMigration>
<rescap3:DesktopApp AumId="[your_app_aumid]" />
<rescap3:DesktopApp ShortcutPath="%USERPROFILE%\Desktop\[my_app].lnk" />
<rescap3:DesktopApp ShortcutPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\[my_app].lnk" />
<rescap3:DesktopApp ShortcutPath="%PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\[my_app_folder]\[my_app].lnk"/>
</rescap3:DesktopAppMigration>
</rescap3:Extension>
</Extensions>
После установки приложения пин-коды на панели задач или в меню , а также плитки (для Windows 10) автоматически запускают приложение Store.
Перенос расширений файлов и сопоставлений протоколов
Если приложение поддерживает расширения файлов или сопоставления протоколов, а пользователи выбрали приложение в качестве приложения по умолчанию для определенных расширений и протоколов файлов, вы можете перенести эти связи в упаковаированное приложение Store. Эта миграция может быть достигнута путем обновления манифеста приложения с помощью следующего фрагмента кода.
xmlns:rescap3="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities/3"
...
<Extensions>
<uap:Extension Category="windows.fileTypeAssociation">
<uap3:FileTypeAssociation Name=".foo">
<rescap3:MigrationProgIds>
<rescap3:MigrationProgId>Foo.Bar.1</rescap3:MigrationProgId>
</rescap3:MigrationProgIds>
…
</uap3:FileTypeAssociation>
</uap:Extension>
</Extensions>
Просто укажите программные идентификаторы , в которые требуется перенести, и система автоматически переносит их в приложение после установки.
Windows developer