【问题标题】:update uwp app from usb drive on raspberry pi从树莓派上的 USB 驱动器更新 uwp 应用程序
【发布时间】:2023-03-04 02:03:01
【问题描述】:

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

我不知道如何执行此操作或是否可能。非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

    我想在我的应用中添加一个更新按钮,当按下它时 寻找 U 盘并检查文件。

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

    但您不能像在桌面上通过 Windows IoT Core 不支持的 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;
            }
        }
    

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

    【讨论】:

    • 感谢您的详细帖子。看起来很简单,我会在今天晚些时候或明天试试这个,然后就结果回复你。再次感谢您对此提供的帮助,非常感谢。
    • 好的,我有机会玩这个。我真的很接近,我创建了我的应用程序包,它有一个新的版本号。然后我将文件复制到我的 USB 驱动器并将其放入 Raspberry PI 的 USB 端口,然后单击更新按钮并收到以下消息。 "提供的包已经安装,无法重新安装包"
    • @PBSnake 该错误表明您正在安装与当前正在运行的版本相同的版本。增加应用版本,然后重试。
    • @PBSnake 请注意,如果当前运行的版本是您从 VS2017 部署的,则更新操作将失败,因为正在运行的应用程序是未打包的应用程序,因此您无法使用已打包的应用程序进行更新。因此,请确保正在运行的也安装了打包的 appxbundle。我是通过设备门户完成的。
    • 我确实增加了几次版本号。我在 Visual Studio 中安装了带有部署选项的版本。正确的做法是什么?
    猜你喜欢
    • 2022-12-05
    • 1970-01-01
    • 2019-02-14
    • 2022-11-14
    • 2018-06-27
    • 1970-01-01
    • 2019-12-15
    • 2019-02-28
    • 1970-01-01
    相关资源
    最近更新 更多