.NET Core WPF Desktop Bridge - ярлыки на рабочем столе / ярлыки на панели задач обходят проверку обновлений - PullRequest
0 голосов
/ 11 октября 2019

Там, где я работаю, одно из наших приложений - это .NET Core WPF-приложение, которое мы недавно переключили на использование моста рабочего стола. Мы заметили, что если пользователь создает ярлык на рабочем столе или ярлык на панели задач для приложения, используя плитку в меню «Пуск», а затем запускает приложение из упомянутого ярлыка, приложение пропускает проверку обновлений (даже если для проверки обновлений указанов файле .appinstaller). Также кажется, что приложение не беспокоится о проверке обновлений в фоновом режиме после открытия приложения, поскольку оно остается на той же версии после того, как пользователь перезапустит его.

Примечание. Приложение обновляется и отображает подсказку. при запуске приложения из меню «Пуск» с помощью живой плитки или пункта меню «Пуск». Мы убедились, что все пользователи и наши машины для разработки используют Windows 10 версии 1903.

Это пример того, как выглядит файл шаблона приложения:

<?xml version="1.0" encoding="utf-8"?>
<AppInstaller Uri="{AppInstallerUri}"
              Version="{Version}"
              xmlns="http://schemas.microsoft.com/appx/appinstaller/2018">

  <MainBundle Name="{Name}"
              Version="{Version}"
              Publisher="{Publisher}"
              Uri="{MainPackageUri}"/>

  <UpdateSettings>
    <OnLaunch HoursBetweenUpdateChecks="0" ShowPrompt="true" UpdateBlocksActivation="true"/>
    <AutomaticBackgroundTask/>
    <ForceUpdateFromAnyVersion>true</ForceUpdateFromAnyVersion>
  </UpdateSettings>

</AppInstaller>

Я спросил об этомна MS 'MSIX GitHub репо, но они не ответили. На данный момент, мы задаемся вопросом, сталкивался ли кто-либо еще здесь с этой проблемой и были ли они в состоянии найти обходной путь или способ решить ее? Есть ли что-то, что нам нужно добавить в наш файл .appxmanifest или что-то еще, что мы пропустили в файле .appinstaller?

Редактировать Тот же вопрос на форумах MSIX, где, скорее всего, ответит MSFT.

Изменить 2

Мы также получили ответ от Microsoft относительно этого в репозитории Github и в сообществе разработчиков VS. Они сказали, что собираются разобраться в этом. Я обновлю это снова или отправлю ответ от них, когда у них будет больше информации.

https://github.com/MicrosoftDocs/msix-docs/issues/59

https://developercommunity.visualstudio.com/content/problem/776276/published-msixappx-does-not-check-for-updates-when.html?childToView=776800#comment-776800

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Microsoft смогла ответить на наши заявки, и они сообщили нам, что в настоящее время Windows 10 (1903) в настоящее время не поддерживает запуск средства обновления, когда вы запускаете приложение из традиционного ярлыка (Рабочий стол / Панель задач). Рекомендуемый обходной путь - запуск из меню «Пуск» или из активной плитки:

https://techcommunity.microsoft.com/t5/MSIX-Deployment/Update-process-not-started-lauching-the-program-by-shortcut-or/m-p/902430

https://github.com/MicrosoftDocs/msix-docs/issues/59

https://developercommunity.visualstudio.com/content/problem/776276/published-msixappx-does-not-check-for-updates-when.html?childToView=776800#comment-776800

Обновление:

Tanaka Jimha / Huios очень любезно предоставила нам возможность обойти использование одного из API-интерфейсов Windows 10: https://github.com/MicrosoftDocs/msix-docs/issues/59#issuecomment-542927336

Чтобы использовать его, вам придетсяСсылка на обычные сборки Windows 10, которые вы можете сделать вручную или через NuGet. Документацию о том, как это сделать, вы можете найти здесь: https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/desktop-to-uwp-enhance

Примечание. Если вы используете Rider или Resharper, я предлагаю обновить их до 2019.2.3, если вы собираетесь использовать эти сборки в одном проекте. как ваши представления XAML. В более ранних версиях была ошибка с WPF-приложениями .NET Core 3.0, когда пространства имен и классы в библиотеках UWP вызывают странные ошибки, такие как XAML intellisense, говорящие о том, что такие вещи, как Grid, User Control, Window, Stack Panel и т. Д. Неоднозначны.

После того, как вы их добавите, вы можете продолжить и начать использовать API в пространстве имен Windows.Management.Deployment. Вот небольшой быстрый и грязный код, который покажет вам, как его использовать, но вы, конечно, можете поэкспериментировать и / или обратиться к примеру Танаки по ссылке выше:

  • Чтобы проверить наличие обновлений,Вы можете сделать что-то вроде этого:

        public static async Task<bool> CheckForUpdates()
    {
        var currentPackage = Package.Current;
        var status = await currentPackage.CheckUpdateAvailabilityAsync();
        return status.Availability == PackageUpdateAvailability.Required || status.Availability == PackageUpdateAvailability.Available;
    }
    

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

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

Во-вторых, чтобы получить обновление, загрузить и установить его, вы можете сделать что-то вроде этого:

public static async Task<bool> GetUpdates(string uriToUse)
{
    try
    {

        var packageManager = new PackageManager();
        var uri = new Uri(uriToUse);
        await packageManager.UpdatePackageAsync(uri, null, DeploymentOptions.ForceApplicationShutdown);
        return true;

    }
    catch (Exception e)
    {
        //Log the exception, or do something else, up to you
        return false;
    }
}

Поймать попыткувыше, там есть, так как UpdatePackageAsync выдает исключение, если что-то останавливает его от загрузки обновления. Это может быть вызвано несколькими причинами (обновление IE уже установлено, неверный сертификат и т. Д.). Поэтому вы можете сначала использовать CheckUpdateAvailabilityAsync () в текущем пакете, прежде чем пытаться запустить обновление.

В любом случае, надеюсь, это окажется полезным для всех, кто сталкивается с этим, и Microsoft не выпустила обновление для Windows, которое охватывает традиционные ярлыки приложений.

0 голосов
/ 14 октября 2019

О свойствах ShowPrompt и ForceUpdateFromAnyVersion , вам нужно указать на эту схему - xmlns="http://schemas.microsoft.com/appx/appinstaller/2018" в xaml. И они доступны в версии 1903 года. Поэтому, если ваша версия не 1903, вы можете удалить эти два свойства.

...