Распространение упакованного классического приложения

Если вы решили упаковать классическое приложение в пакет MSIX (см. статью "Создание пакета MSIX из кода"), вы можете опубликовать упаковаированное приложение в Microsoft Store или загрузить его на одно или несколько устройств.

Примечание.

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

Распространение приложения путем его публикации в Microsoft Store

Microsoft Store — это привычный для пользователей способ получать приложения.

Опубликуйте приложение в Microsoft Store, чтобы охватить самую широкую аудиторию. Корпоративные клиенты также могут приобрести ваше приложение, чтобы распространять его внутри своих организаций через Microsoft Store для бизнеса.

Если вы планируете публиковать приложение в Microsoft Store, в ходе процесса отправки вам будет предложено ответить на несколько дополнительных вопросов. Это связано с тем, что манифест пакета объявляет возможность с ограниченным доступом под названием runFullTrust, и мы должны утвердить использование этой возможности приложением. Дополнительные сведения об этом требовании см. здесь: ограниченные возможности.

Подписывать приложение перед отправкой в Store не требуется.

Важно!

Если вы планируете опубликовать приложение в Microsoft Store, проверьте исправность его работы на устройствах под управлением Windows 10 S или Windows 11 S (это обязательное требование для Store). Дополнительные сведения см. в статье Тестирование приложения для Windows в Windows 10 S или Windows 11 S.

Распространение приложения без размещения в Microsoft Store

Если вы не хотите использовать Store, можно вручную распространить приложения на одно или несколько устройств.

Это имеет смысл, если вам нужен более жесткий контроль над процессом распространения либо вы не хотите участвовать в процессе сертификации Microsoft Store.

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

Вы можете создать сертификат или получить его от известного поставщика, например Verisign.

Если ваше приложение будет распространяться на устройства под управлением Windows 10 S или Windows 11 S, оно должно быть подписано Microsoft Store, поэтому вам придется отправить его в Store перед распространением.

Если вы создаете сертификат, его необходимо установить в хранилище сертификатов Доверенный корневой сертификат или Доверенные лица на каждом устройстве, которое запускает ваше приложение. Если сертификат получен от известного поставщика, в других системах достаточно установить только ваше приложение.

Важно!

Убедитесь, что имя издателя на сертификате совпадает с именем издателя вашего приложения.

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

Дополнительные сведения о загрузке неопубликованного приложения на другие устройства см. в статье Загрузка неопубликованных бизнес-приложений в Windows.

Перевод пользователей на упакованное приложение

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

  • Задайте ссылки на упакованное приложение для существующих плиток начального экрана и кнопок на панели задач.
  • Создайте связь между упакованным приложением и некоторыми типами файлов.
  • Укажите упакованное приложение как приложение по умолчанию для открытия некоторых типов файлов.

Полный перечень расширений и рекомендации по их использованию см. в разделе Переход пользователей на ваше приложение.

Кроме того, в упакованное приложение можно добавить код, который выполняет следующие задачи:

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

Давайте подробнее рассмотрим каждую из этих задач. Начнем с переноса пользовательских данных.

Перенос пользовательских данных

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

Вот пример такого процесса в упакованном приложении на основе .NET.

private void MigrateUserData()
{
    String sourceDir = Environment.GetFolderPath
        (Environment.SpecialFolder.ApplicationData) + "\\AppName";

    if (sourceDir != null)
    {
        DialogResult migrateResult = MessageBox.Show
            ("Would you like to migrate your data from the previous version of this app?",
             "Data Migration", MessageBoxButtons.YesNo);

        if (migrateResult.Equals(DialogResult.Yes))
        {
            String destinationDir =
                Windows.Storage.ApplicationData.Current.LocalFolder.Path + "\\AppName";

            Process process = new Process();
            process.StartInfo.FileName = "robocopy.exe";
            process.StartInfo.Arguments = "%LOCALAPPDATA%\\AppName " + destinationDir + " /move";
            process.StartInfo.CreateNoWindow = true;
            process.Start();
            process.WaitForExit();

            if (process.ExitCode > 1)
            {
                //Migration was unsuccessful -- you can choose to block/retry/other action
            }
        }
    }
}

Удаление классической версии приложения

Желательно не удалять классическое приложение, не запросив разрешения пользователя. Отобразите диалоговое окно с запросом соответствующего разрешения. Пользователи могут решить не удалять классическую версию. В этом случае вам нужно решить, блокировать ли использование классического приложения или поддерживать параллельное использование обеих версий.

Вот пример такого процесса в упакованном приложении на основе .NET.

Полный контекст этого фрагмента см. в файле MainWindow.cs примера Средство просмотра изображений WPF с переходом, переносом и удалением.

private void RemoveDesktopApp()
{
    //Typically, you can find your uninstall string at this location.
    String uninstallString = (String)Microsoft.Win32.Registry.GetValue
        (@"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion" +
         @"\Uninstall\{7AD02FB8-B85E-44BC-8998-F4803BA5A0E3}\", "UninstallString", null);

    //Detect if the previous version of the Desktop application is installed.
    if (uninstallString != null)
    {
        DialogResult uninstallResult = MessageBox.Show
            ("To have the best experience, consider uninstalling the "
              + " previous version of this app. Would you like to do that now?",
              "Uninstall the previous version", MessageBoxButtons.YesNo);

        if (uninstallResult.Equals(DialogResult.Yes))
        {
                    string[] uninstallArgs = uninstallString.Split(' ');

            Process process = new Process();
            process.StartInfo.FileName = uninstallArgs[0];
            process.StartInfo.Arguments = uninstallArgs[1];
            process.StartInfo.CreateNoWindow = true;

            process.Start();
            process.WaitForExit();

            if (process.ExitCode != 0)
            {
                //Uninstallation was unsuccessful - You can choose to block the application here.
            }
        }
    }

}

Следующие шаги

Есть вопросы? Обратитесь к нам на сайте технического сообщества.

Если при публикации приложения в Store возникнут проблемы, вы найдете полезные советы в этой записи блога.