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

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

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

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

【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算法day20
java算法day20 701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点108 将有序数组转换为二叉搜索树 本次的题目都是用递归函数的返回值来完成,多熟悉这样的用法,很方便。 其实我感觉,涉及构造二叉树的题目,用递归函数的返回值…...

web自动化测试-python+selenium+unitest
文章目录 Web自动化测试工具1. 主流的Web自动化测试工具2. Selenium家族史 Web自动化测试环境搭建基于Python环境搭建示例:通过程序启动浏览器,并打开百度首页,暂停3秒,关闭浏览器 页面元素定位1. 如何进行元素定位?2.…...

LeetCode题练习与总结:组合两个表--175
一、题目描述 SQL Schema > Pandas Schema > 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该表的主…...

数据结构:二叉搜索树(简单C++代码实现)
目录 前言 1. 二叉搜索树的概念 2. 二叉搜索树的实现 2.1 二叉树的结构 2.2 二叉树查找 2.3 二叉树的插入和中序遍历 2.4 二叉树的删除 3. 二叉搜索树的应用 3.1 KV模型实现 3.2 应用 4. 二叉搜索树分析 总结 前言 本文将深入探讨二叉搜索树这一重要的数据结构。二…...

深入理解Prompt工程
前言:因为大模型的流行,衍生出了一个小领域“Prompt工程”,不知道大家会不会跟小编一样,不就是写提示吗,这有什么难的,不过大家还是不要小瞧了Prompt工程,现在很多大模型把会“Prompt工程”作为…...

代码随想录算法训练营day6 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1.两数之和
文章目录 哈希表键值 哈希函数哈希冲突拉链法线性探测法 常见的三种哈希结构集合映射C实现std::unordered_setstd::map 小结242.有效的字母异位词思路复习 349. 两个数组的交集使用数组实现哈希表的情况思路使用set实现哈希表的情况 202. 快乐数思路 1.两数之和思路 总结 今天是…...

vue3 vxe-table 点击行,不显示选中状态,加上设置isCurrent: true就可以设置选中行的状态。
1、上个图,要实现这样的: Vxe Table v4.6 官方文档 2、使用 row-config.isCurrent 显示高亮行,当前行是唯一的;用户操作点击选项时会触发事件 current-change <template><div><p><vxe-button click"sel…...

Linux没有telnet 如何测试对端的端口状态
前段时间有人问uos没有telnet,又找不到包。 追问了一下为什么非要安装telnet,答复是要测试对端的端口号。 这里简单介绍一下,测试端口号的方法有很多,telent只是在windows上经常使用,linux已很少安装并使用该命令&…...

花几千上万学习Java,真没必要!(二十九)
1、基本数据类型包装类: 测试代码1: package apitest.com; //使用Integer类的不同方法处理整数。 //将字符串转换为整数(parseInt)和Integer对象(valueOf), //将整数转换回字符串(…...

C#如何引用dll动态链接库文件的注释
1、dll动态库文件项目生成属性中要勾选“XML文档文件” 注意:XML文件的名字切勿修改。 2、添加引用时XML文件要与DLL文件在同一个目录下。 3、如果要是添加引用的时候XML不在相同目录下,之后又将XML文件复制到相同的目录下,需要删除引用&am…...