Обновить приложение 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;
}
}
Приложение обновится и автоматически перезапустится до новой версии.