当前位置: 首页 > news >正文

使用 Windows 应用程序 SDK 构建下一代应用程序

微软面临的最大问题之一是如何让 Windows 再次成为吸引开发者的平台。无论用户使用什么设备和操作系统,都可以很容易地将 Web 前端放在支持桌面和移动用户的云原生应用程序上。

我们处在一个奇怪的境地,唯一能利用最新 PC 硬件的应用程序是 Office、Photoshop 和游戏等工具。这使得微软宣布其 Copilot+ PC 的新硬件标准成为一个有趣的转折点。它旨在将 AI 推理引入桌面,并且(除了支持 WebNN 本地推理标准之外)需要本机代码才能使用该新硬件。

那么微软如何让开发人员回归桌面和 Windows?部分问题在于 Windows 开发方法不一致且支离破碎。您使用 Win32 和 Windows SDK 还是使用 WPF 和 WinUI 构建 .Net 应用程序?还是采用 Windows 8 提供的方法并使用 WinRT API?

这就是Windows 应用程序 SDK 的作用所在。它被认为是一种打包来自 Windows SDK 之外的 API 和组件的方式,也是 Microsoft 在正常 Windows 发布周期之外向开发人员提供新功能的方式。

正如 Microsoft 所指出的,它并不是现有工具和技术的替代品。相反,它旨在与它们协同工作,因此您可以继续使用熟悉的语言和框架构建 Windows 应用程序,并添加 Windows App SDK 作为一种现代化代码的方式。

Windows 应用 SDK 入门

Windows 应用程序 SDK 是 Visual Studio 扩展和应用程序组件的混合体。它们添加了模板以快速构建新项目。您需要安装 Win UI 3 工具才能使用其面向用户的功能。其他工具可帮助将代码迁移到新框架。

安装后,它会提供新的库,帮助您构建与现代 Windows 功能兼容的应用程序。这些包括 Win UI 3 控件、改进的文本渲染(以提高文本优先应用程序中的可读性)、更好的应用程序生命周期管理(包括利用操作系统级电源管理功能)和新的窗口管理工具。

其他新功能提供更好的应用程序资源管理,包括对多种语言字符串的支持、改进的推送和本地操作通知框架,以及确保二进制文件和其他应用程序工件中包含适当运行时的打包工具。

微软提供了大量文档,包括所有重要的迁移指南。微软积极鼓励使用 Win UI 3 和 Windows 应用程序 SDK(如果不弃用旧的 Windows 框架),它们是重要的工具,因为它们可以帮助您从 UWP 转向新的工作方式。迁移应该很简单,首先将控件从 Win UI 2 迁移到 Win UI 3,在此过程中更改命名空间,然后再复制应用程序业务逻辑。

如果您的代码是用 .Net 编写的,事情会更容易,因为 .Net 升级助手将帮助将 C# UWP 代码移动到 Windows 应用程序 SDK,从而自动完成大部分过程。

花时间阅读文档非常值得,因为它有助于将 UWP 功能映射到 Windows App SDK,从而允许您更新低级代码。一些更改只是更改命名空间的问题,而其他更改则需要新类来复制旧功能。大多数功能都受支持,但在极少数情况下,您可能需要开发自己的库和控件。Microsoft 提供了一个表格,显示了最常见的映射,这应该有助于迁移。

一些更大的平台级变化伴随着迁移而来。UWP 提供了应用程序级隔离,而当迁移到替代框架时,这种隔离就会消失。不过,还有一些选项,比如 Windows 的新 Win32 App Isolation 工具,它利用较新的 Windows 安全功能在隔离的沙盒中运行代码。

您可以在 Microsoft 学习网站上找到UWP 应用程序和 Windows 应用程序 SDK 之间的差异列表。其中包括可能存在解决方法的地方,以及尚未迁移的功能。一个关键问题是性能,因为应用程序将使用更多 RAM 并且加载时间会更长。

下载频道显示即将推出的功能


Windows App SDK 提供三种不同的渠道;您可以选择当前稳定版本、即将发布的功能预览版或试用新功能的实验渠道。当前支持的版本是 1.5.5 版,于 2024 年 7 月初发布。

下一个主要版本将在六个月左右发布。当前预览版早于当前版本,因此新版本应该很快就会发布。实验版本基于计划的 1.6 版本的开发树,第二个版本将于 2024 年 7 月发布。

微软提供了每个渠道中可用的功能列表以及当前的支持生命周期。版本从首次发布开始支持一年,因此当前的 1.5 版本将支持到 2025 年 2 月底,而 1.4 版本将在 2024 年 8 月底停止支持。

Windows App SDK 支持有一个不寻常的警告:虽然它提供了与 Windows 10 版本 1809 的兼容性,但从技术上讲,只涵盖支持中的 Windows 版本。

Windows App SDK 和 Copilot 运行时


Windows App SDK 旨在成为 Copilot Runtime 的一个关键组件,除其他功能外,它还托管基于 Phi Silica 本地生成 AI 模型的人工智能 API 和 AI 驱动的 OCR 服务。然而,在 Build 发布两个月后,当前的 1.6 版实验版本仍然缺少这些承诺的功能。如果微软想将开发人员的注意力转移到 Windows 上,它需要利用其新硬件的功能,尽快推出 Copilot Runtime API,并加速 1.6 版从实验版到生产的过渡。

Copilot+ PC 的早期推出似乎是一种将硬件推向市场的方式,但按照 Copilot Runtime 功能和开发工具推出的速度,我们最多要到 2024 年底或 2025 年初才能利用它。不仅在 Windows App SDK 的 AI 功能方面进展缓慢,而且在 Copilot Runtime 堆栈的所有元素方面进展缓慢,这仍然令人失望。

您无法将基于 SDK 版本的代码发送到 Windows 应用商店,因为它不受支持。用户希望能够使用基于这些新功能构建的软件,虽然电池寿命的提高对于新的基于 Arm 的硬件来说是一个巨大的优势,但我们等待新的 AI 端点功能的时间越长,开发使用它们的应用程序就越困难。

在几个月内零零碎碎地发布 Copilot Runtime 不会促使开发人员使用它,而使用 ONNX 的解决方法使得打包和部署应用程序变得困难。

是时候移植你的代码了


尽管如此,将应用程序移植到 Windows App SDK 的过程还是值得的。至少它为您提供了一种面向未来的代码方法,并利用了 Microsoft 首选的 Windows 开发路径。

由于它建立在熟悉的 .Net 工具和开源技术之上,因此学习曲线很浅。还有一些超越 Microsoft 工具的选项,允许您引入第三方控件和跨平台工具,例如 Uno 和 Avalonia UI。

Microsoft 提供了示例代码,帮助您通过其学习平台或现成的应用程序将 Windows App SDK 功能添加到您的代码中。过去,我曾接触过 Windows 社区工具包,这是一个提供功能示例以及用于实现这些功能的代码的采样器。

该应用程序定期更新;当前版本是 8.0 版。它不仅仅是为了演示如何使用控件和 UI;它还包括处理复杂数学运算的代码,这对于使用矢量和图形搜索算法至关重要。

Windows App SDK 对于实现桌面应用程序开发流程的现代化非常重要,它为新代码和现有代码提供了新功能支持。

如果您要为 Windows 构建应用程序,则需要使用它,因为它提供对基本 API 和库的访问,以及为最佳使用现代 Windows 功能提供保护措施和指南。

相关文章:

使用 Windows 应用程序 SDK 构建下一代应用程序

微软面临的最大问题之一是如何让 Windows 再次成为吸引开发者的平台。无论用户使用什么设备和操作系统,都可以很容易地将 Web 前端放在支持桌面和移动用户的云原生应用程序上。 我们处在一个奇怪的境地,唯一能利用最新 PC 硬件的应用程序是 Office、Phot…...

可消费的媒体类型和可生成的媒体类型

可消费的媒体类型和可生成的媒体类型 在 Spring MVC 中,“可消费的媒体类型”和“可生成的媒体类型”是两个重要的概念,用于控制控制器方法处理和返回的内容类型。它们分别通过 consumes 和 produces 属性来指定。下面是它们的详细区别: 可…...

C++中指针与迭代器的区别

C中的迭代器和指针都是用于访问和操作内存中的数据结构的机制,但它们在使用方式和功能上有一些关键的区别。 #mermaid-svg-23bevhEih3Ch4ucl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-23bevhEih3Ch…...

若依框架 : 生成代码

6.生成代码 6.1.配置生成设置 ruoyi-generator -> src -> main -> resources -> generator.yml 由于 案例中 表都有 前缀 为 tta_ , 这里设置去掉 6.2.生成代码 6.2.1.导入数据库中的表 6.2.2.修改设置 6.2.2.1.设置生成信息 点击 编辑 -> 生成信息 特别…...

RTMP协议解析

RTMP(Real Time Message Protocol)是一种由Adobe公司提出的应用层协议,主要用于实时音视频数据的传输。RTMP协议的主要有以下特点: 1. 多路复用:RTMP允许多个音视频数据流在单个TCP连接上进行传输。 2. 分包传输&…...

禁忌搜索算法(Tabu Search,TS)及其Python和MATLAB实现

禁忌搜索算法是一种现代启发式搜索方案,主要用于解决组合优化问题。该算法由George F. Lugeral于1986年首次提出,旨在增强局部搜索算法的性能,避免其陷入局部最优解。禁忌搜索利用一个称为“禁忌表”的数据结构,记住最近访问的解决…...

Meta发布Llama 3.1 405B模型:开源与闭源模型之争的新篇章

引言 在人工智能领域,开源与闭源模型之争一直是热点话题。近日,Meta发布了最新的Llama 3.1 405B模型,以其强大的性能和庞大的参数规模,成为了开源模型中的佼佼者。本文将详细介绍Llama 3.1 405B模型的性能、功能及其在开源领域的…...

Linux网络协议深度解析:从IP到TCP/IP堆栈

Linux网络协议深度解析是一个复杂而详细的主题,它涵盖了从基本的数据包传输到复杂的协议交互。以下是对"Linux网络协议深度解析:从IP到TCP/IP堆栈"这一主题的简要解析: IP协议(Internet Protocol) •作用:…...

AWS DMS MySQL为源端,如何在更改分区的时候避免报错

问题描述: 文档[1]中描述MySQL compatible Databases作为DMS任务的源端,不支持MySQL 分区表的 DDL 更改。 在源端MySQL进行分区添加时,日志里会出现如下报错: [SOURCE_CAPTURE ]W: Cannot change partition in table members…...

Java从基础到高级特性及应用

Java,作为一门历史悠久且广泛应用的编程语言,自1995年问世以来,便以其跨平台性、面向对象、自动内存管理等特点,在软件开发领域占据了举足轻重的地位。从桌面应用到企业级系统,从移动开发到云计算服务,Java…...

JavaScript(17)——事件监听

什么是事件? 事件是在编程时系统内发生的动作或发生的事情,比如用户在网页上单击一个按钮 什么是事件监听? 就是让程序检测是否有事件产生,一旦有事件触发,就立刻调用一个函数做出响应,也称为绑定事件或…...

Dav_笔记11:SQL Tuning Overview-sql调优 之 4

开发高效的SQL语句 本节介绍了提高SQL语句效率的方法: ■验证优化程序统计信息 ■审查执行计划 ■重构SQL语句 ■重组索引 ■修改或禁用触发器和约束 ■重组数据 ■随着时间的推移维护执行计划 ■尽可能少地访问数据 验证优化程序统计信息 查询优化器在确定最佳执行…...

vue3引入openlayers

安装ol包 OpenLayers作为 ol npm包提供,它提供了官方支持的API的所有模块。 官方地址:ol npm install ol模块和子模块约定 具有CamelCase名称的OpenLayers模块提供类作为默认导出,并且可能包含其他常量或函数作为命名导出: i…...

大数据管理中心设计规划方案(可编辑的43页PPT)

引言:随着企业业务的快速发展,数据量急剧增长,传统数据管理方式已无法满足高效处理和分析大数据的需求。建立一个集数据存储、处理、分析、可视化于一体的大数据管理中心,提升数据处理能力,加速业务决策过程&#xff0…...

Android --- 广播

广播是什么? 一种相互通信,传递信息的机制,组件内、进程间(App之间) 如何使用广播? 组成部分 发送者-发送广播 与启动其他四大组件一样,广播发送也是使用intent发送。 设置action&#xff…...

AR 眼镜之-蓝牙电话-实现方案

目录 📂 前言 AR 眼镜系统版本 蓝牙电话 来电铃声 1. 🔱 技术方案 1.1 结构框图 1.2 方案介绍 1.3 实现方案 步骤一:屏蔽原生蓝牙电话相关功能 步骤二:自定义蓝牙电话实现 2. 💠 屏蔽原生蓝牙电话相关功能 …...

stl-set

目录 目录 内部自动有序、不含重复元素 关于能不能自己造一个cmp,还挺复杂。 访问:只能用迭代器且受限 添加元素:没有pushback,用insert 复杂度:ologn ​编辑 查找元素find()&#xff1…...

【Stable Diffusion】(基础篇五)—— 使用SD提升分辨率

使用SD提升分辨率 本系列博客笔记主要参考B站nenly同学的视频教程,传送门:B站第一套系统的AI绘画课!零基础学会Stable Diffusion,这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 在前期作画的…...

5.CSS学习(浮动)

浮动(float) 是一种传统的网页布局方式,通过浮动,可以使元素脱离文档流的控制,使其横向排列。 其编写在CSS样式中。 float:none(默认值) 元素不浮动。 float:left 设置的元素在其包含…...

Spring Cloud微服务项目统一封装数据响应体

在微服务架构下,处理服务之间的通信和数据一致性是一个重要的挑战。为了提高开发效率、保证数据的一致性及简化前端开发,统一封装数据响应体是一种非常有效的实践。本文博主将介绍如何在 Spring Cloud 微服务项目中统一封装数据响应体,并分享…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

三体问题详解

从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...