从树莓派上的USB驱动器更新uwp应用

时间:2018-12-03 00:10:00

标签: uwp raspberry-pi3 iot windows-10-iot-core sideloading

我有一个在Visual Studio 2017中创建的通用Windows应用程序。我已将此应用程序部署在我的树莓派上,并且运行良好。我还使用2017创建了一个程序包。我想向我的应用程序添加一个更新按钮,当按下该按钮时,它将查找USB记忆棒并检查文件。我看到该文件将更新应用程序,就像它在寻找商店进行更新一样。本机未连接互联网,仅供内部使用。但是,我想确保可以更新这些文件,或者提供带有更新的USB记忆棒,以便同事可以对其进行更新。

我不知道如何执行此操作或不可行。非常感谢您的协助。

1 个答案:

答案 0 :(得分:1)

  

我想在我的应用程序中添加一个更新按钮,当按下它时,   寻找USB记忆棒并检查文件。

packagemanager.UpdatePackageAsync API可以帮助您在UWP应用中执行此操作并自行更新。

但是,您不能像在Windows IoT核心版上不支持的通过FilePicker在桌面上那样简单地“寻找USB记忆棒并检查文件”。在这里,我显示了一个示例来指定文件位置和版本,然后对其进行更新。

要使用此API,您需要在Package.appxmanifest中添加packageManagement功能,如下所示:

...   
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;
        }
    }

该应用程序将更新并自动重新启动到新版本。