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, которое охватывает традиционные ярлыки приложений.