Обновить приложение UWP с USB-накопителя на Raspberry Pi

У меня есть универсальное приложение для Windows, которое я создал в visual studio 2017. Я развернул это приложение на своем Raspberry Pi, и оно работает хорошо. Я также создал пакет, используя 2017. Я хочу добавить кнопку обновления в мое приложение, и при нажатии оно будет искать USB-флешку и проверять файл. Я вижу, что этот файл будет обновлять приложение так же, как если бы он искал магазин для обновления. Это устройство не имеет подключения к Интернету и предназначено только для внутреннего использования. Но я хочу убедиться, что я могу обновить их или дать флешку с обновлением, чтобы коллега мог обновить его.

Я понятия не имею, как это сделать или если это возможно. Любая помощь очень ценится.

1 ответ

Решение

Я хочу добавить кнопку обновления в свое приложение, и при нажатии она будет искать USB-флешку и проверять файл.

packagemanager.UpdatePackageAsync API может помочь вам сделать это в вашем приложении UWP и обновиться.

Но вы не можете просто "найти USB-накопитель и проверить файл", как вы можете сделать это на рабочем столе с помощью FilePicker, который не поддерживается в Windows IoT Core. Здесь я показываю образец, чтобы указать местоположение файла и версию, а затем обновить его.

Чтобы использовать этот API, вам нужно добавить packageManagement Возможность в Package.appxmanifest, как следующие:

...   
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" 

IgnorableNamespaces="uap mp rescap">

...

  <Capabilities>
    <rescap:Capability Name="packageManagement" />
  </Capabilities>

Вот пример кода, на который вы можете сослаться:

MainPage.xaml

<StackPanel VerticalAlignment="Center">
    <Button Content="Update" Click="Button_Click"/>
    <TextBox Name="NewVersion" PlaceholderText="For example: 1.0.5.0"/>
    <TextBox Name="PkgPath" PlaceholderText="For example: D:\AppUpdate"/>
    <TextBlock Text="Install result: " Name="Result" />
</StackPanel>

MainPage.xaml.cs

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            string versionNum = NewVersion.Text;
            string packagePath = PkgPath.Text; 
            string packageLocation = packagePath + @"\TestAppUpdate_" + versionNum + "_x86_x64_arm_Debug.appxbundle";
            PackageManager packagemanager = new PackageManager();
            await packagemanager.UpdatePackageAsync(new Uri(packageLocation), null, DeploymentOptions.ForceApplicationShutdown);
        }
        catch (Exception ex)
        {
            Result.Text = ex.Message;
        }
    }

Приложение обновится и автоматически перезапустится до новой версии.

Другие вопросы по тегам