Как скачать и установить обновления из магазина Windows, используя C ++ Windows SDK API? - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь написать код, который проверяет наличие обновления в магазине Windows, и загрузить его оттуда. Я работаю на C ++, поэтому я хочу использовать код с этой страницы https://docs.microsoft.com/ru-ru/windows/uwp/packaging/self-install-package-updates и особенно метод

публичная асинхронная задача DownloadAndInstallAllUpdatesAsync ()

, который описан там, но мне не удалось преобразовать его в C ++. Я сделал что-то вроде этого:

.h
    Windows::Services::Store::StoreContext^ context = nullptr;
    Concurrency::task<Windows::Foundation::Collections::IVectorView<Windows::Services::Store::StorePackageUpdate ^> ^> updatesTask;
    void DownloadAndInstallAllUpdatesAsync();



.cpp
void myApp::DownloadAndInstallAllUpdatesAsync()
{
    if (context == nullptr)
        context = StoreContext::GetDefault();

    // Get the updates that are available.
    updatesTask = create_task(context->GetAppAndOptionalStorePackageUpdatesAsync());

    std::this_thread::sleep_for(std::chrono::seconds(2));

    updatesTask.then([this](IVectorView<StorePackageUpdate^>^ const &update) {
        if (update->Size > 0) {

            // Download and install the updates.
            IAsyncOperationWithProgress<StorePackageUpdateResult^, StorePackageUpdateStatus>^ downloadOperation =
                context->RequestDownloadAndInstallStorePackageUpdatesAsync(update);
        }
    });
}

Но у меня есть две проблемы с этим кодом:

  • Без выполнения sleep в течение двух секунд для потока. Я не всегда получаю ответ от асинхронного вызова context-> GetAppAndOptionalStorePackageUpdatesAsync ();
  • После вызова context-> RequestDownloadAndInstallStorePackageUpdatesAsync (update); У меня появилось всплывающее окно с вопросом, хочу ли я загрузить обновление или я хочу отклонить эту операцию, и независимо от того, какой ответ я выбираю, приложение зависло ...

Заранее спасибо за помощь

...