<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://xiaoyeapp.com/zh-cn/blog</id>
    <title>Xiaoye Remote Blog</title>
    <updated>2026-09-23T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://xiaoyeapp.com/zh-cn/blog"/>
    <subtitle>Xiaoye Remote Blog</subtitle>
    <icon>https://xiaoyeapp.com/zh-cn/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[记录一个.NET中的AOT死锁问题]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes"/>
        <updated>2026-09-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[从 JSON 解析崩溃一路追到 .NET 运行时 ComWrappers 锁竞争]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-问题现象">1. 问题现象<a href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes#1-%E9%97%AE%E9%A2%98%E7%8E%B0%E8%B1%A1" class="hash-link" aria-label="1. 问题现象的直接链接" title="1. 问题现象的直接链接" translate="no">​</a></h2>
<p>项目是 WinUI 3 + Native AOT 发布，在调试时一切正常，但是发布并启动后几秒内一切正常，过几秒后UI 线程随机无响应，处于“模糊状态”——不是崩溃退出，是卡死没反应。</p>
<p><img decoding="async" loading="lazy" alt="ScreenShot_2026-09-23_205333_236" src="https://xiaoyeapp.com/zh-cn/assets/images/ScreenShot_2026-09-23_205333_236-60f0f45c83eba25c64a971b04f3af8a8.png" width="647" height="399" class="img_ev3q"></p>
<!-- -->
<p>问题的诡异之处在于：</p>
<ul>
<li class="">Debug 模式下运行正常</li>
<li class="">非 AOT 发布正常</li>
<li class="">去掉 里面的json解析调用后不挂起</li>
<li class="">减少for循环次数，只取前 100 条数据，也不挂起</li>
</ul>
<p><img decoding="async" loading="lazy" alt="ScreenShot_2026-09-23_202850_261" src="https://xiaoyeapp.com/zh-cn/assets/images/ScreenShot_2026-09-23_202850_261-ae27dd463dc8d221e2e7aada79ed2afb.png" width="779" height="463" class="img_ev3q"></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-问题假设">2. 问题假设<a href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes#2-%E9%97%AE%E9%A2%98%E5%81%87%E8%AE%BE" class="hash-link" aria-label="2. 问题假设的直接链接" title="2. 问题假设的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="假设一jsonelement-在-aot-下元数据被裁剪">假设一：JsonElement 在 AOT 下元数据被裁剪<a href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes#%E5%81%87%E8%AE%BE%E4%B8%80jsonelement-%E5%9C%A8-aot-%E4%B8%8B%E5%85%83%E6%95%B0%E6%8D%AE%E8%A2%AB%E8%A3%81%E5%89%AA" class="hash-link" aria-label="假设一：JsonElement 在 AOT 下元数据被裁剪的直接链接" title="假设一：JsonElement 在 AOT 下元数据被裁剪的直接链接" translate="no">​</a></h3>
<p>最初怀疑 <code>System.Text.Json</code> 的 <code>JsonElement</code> 动态访问在 Native AOT 下缺少元数据。但很快被推翻：</p>
<p>同一个 <code>item</code> 上，<code>GetStringProperty</code> 被连续调用了 8 次，每次都涉及 <code>TryGetProperty</code> + <code>GetString</code> + 字符串构造。如果 <code>JsonElement</code> 有元数据问题，第一个 <code>GetStringProperty</code> 就应该崩。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="假设二double-值类型返回引用">假设二：double 值类型返回引用<a href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes#%E5%81%87%E8%AE%BE%E4%BA%8Cdouble-%E5%80%BC%E7%B1%BB%E5%9E%8B%E8%BF%94%E5%9B%9E%E5%BC%95%E7%94%A8" class="hash-link" aria-label="假设二：double 值类型返回引用的直接链接" title="假设二：double 值类型返回引用的直接链接" translate="no">​</a></h3>
<p><code>TryGetDouble(out var value)</code> 中的 <code>value</code> 是 <code>double</code>，纯值类型，直接拷贝，不引用 <code>JsonDocument</code> 的内部缓冲区。排除。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="假设三对象初始化器语法">假设三：对象初始化器语法<a href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes#%E5%81%87%E8%AE%BE%E4%B8%89%E5%AF%B9%E8%B1%A1%E5%88%9D%E5%A7%8B%E5%8C%96%E5%99%A8%E8%AF%AD%E6%B3%95" class="hash-link" aria-label="假设三：对象初始化器语法的直接链接" title="假设三：对象初始化器语法的直接链接" translate="no">​</a></h3>
<p>把 <code>new QuoteData { ... }</code> 拆成先 <code>new</code> 再逐行赋值，仍然会出现挂起现象，因此排除赋值时序。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="假设四observableobject-的-propertychanged">假设四：ObservableObject 的 PropertyChanged<a href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes#%E5%81%87%E8%AE%BE%E5%9B%9Bobservableobject-%E7%9A%84-propertychanged" class="hash-link" aria-label="假设四：ObservableObject 的 PropertyChanged的直接链接" title="假设四：ObservableObject 的 PropertyChanged的直接链接" translate="no">​</a></h3>
<p><code>QuoteData</code> 继承 <code>ObservableObject</code>，但改成普通自动属性后问题依然存在。排除事件机制。</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-关键信息">3. 关键信息<a href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes#3-%E5%85%B3%E9%94%AE%E4%BF%A1%E6%81%AF" class="hash-link" aria-label="3. 关键信息的直接链接" title="3. 关键信息的直接链接" translate="no">​</a></h2>
<p>“随机若干秒后才出现”这个观察是关键。如果崩溃是数据层面的，应该在访问那个对象的瞬间触发。几秒的延迟意味着：</p>
<ul>
<li class="">GC 在几秒后运行</li>
<li class="">回收了某块内存或遍历了某个列表</li>
<li class="">撞上了运行时内部的不一致状态</li>
</ul>
<p>根据进程卡死的堆栈结构，在 dotnet/runtime 的官方 Issue 中找到了类似的问题记录。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/ScreenShot_2026-09-23_212050_773-acaea5763ddb47d7616aa183c2206cfd.png" width="1016" height="497" class="img_ev3q"></p>
<p><strong>dotnet/runtime #104582</strong>：</p>
<blockquote>
<p>“正在被遍历的集合进入了坏状态——已释放的条目仍然留在列表中。这是移除操作缺少锁的结果，当终结器运行时，它会与向列表中添加条目的操作产生竞争。”</p>
</blockquote>
<p><strong>microsoft-ui-xaml #9928</strong>：</p>
<blockquote>
<p>“应用能启动，看起来挺流畅，直到 UI 线程完全卡死。死锁发生得非常随机，有时能用几分钟，有时只有几秒，但总是在 GC 等待收集完成时发生。”</p>
</blockquote>
<p>问题的完整链条：</p>
<ol>
<li class="">
<p>你的代码创建 <code>ProductInfo</code> / <code>QuoteData</code> 对象</p>
</li>
<li class="">
<p>WinUI 3 环境下，这些对象被 CsWinRT 投影为原生对象包装器</p>
</li>
<li class="">
<p>包装器注册到运行时的全局追踪器列表</p>
</li>
<li class="">
<p>UI 线程向列表<strong>添加</strong>条目，GC 终结器线程从列表<strong>移除</strong>条目</p>
</li>
<li class="">
<p>移除操作缺少锁保护，两个线程同时操作导致列表内部指针损坏</p>
</li>
<li class="">
<p>几秒后 GC 再次遍历列表，读到坏指针 → 挂起或访问冲突</p>
<p><img decoding="async" loading="lazy" alt="deadlock" src="https://xiaoyeapp.com/zh-cn/assets/images/deadlock-a7b87e09efd8252d4062eb34beebca33.png" width="819" height="436" class="img_ev3q"></p>
</li>
</ol>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="为什么去掉某个调用就修好了">为什么“去掉某个调用”就“修好”了<a href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes#%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8E%BB%E6%8E%89%E6%9F%90%E4%B8%AA%E8%B0%83%E7%94%A8%E5%B0%B1%E4%BF%AE%E5%A5%BD%E4%BA%86" class="hash-link" aria-label="为什么“去掉某个调用”就“修好”了的直接链接" title="为什么“去掉某个调用”就“修好”了的直接链接" translate="no">​</a></h3>
<p>实际上，这不是修复，是降低触发概率。去掉 <code>GetDoubleProperty</code> 或 <code>GetDateTimeProperty</code> 调用，减少了单次遍历期间创建的包装器数量。添加操作的频率降低，与终结器“移除操作”撞上的概率窗口缩小。</p>
<p>同理，只取前 100 条数据、分批处理、本质都是同一个逻辑：<strong>降低单次遍历期间的包装器创建密度，避开锁竞争窗口。</strong></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-解决方法">4. 解决方法<a href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes#4-%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95" class="hash-link" aria-label="4. 解决方法的直接链接" title="4. 解决方法的直接链接" translate="no">​</a></h2>
<p>如果遇到类似问题，在等待运行时更新期间，可以采用分批处理降低触发概率：将大数组拆成小批次，每批处理完后让 UI 线程让出一次，给 GC 完成遍历的机会。</p>
<p>当然这种只是降低竞争概率。单次耗时在毫秒级，具体取决于消息队列繁忙程度，最好的方法当然还是升级到.NET版本；</p>
<p>这个问题已经修复并合入最新 .NET，遇到类似问题的朋友升级项目.NET版本即可 ：</p>
<ul>
<li class="">修复提交记录：<code>dotnet/runtime@d7948dc</code> — “Fixes hang in WinUI apps published to AOT (#104583)”</li>
<li class="">目前合入到 .NET 9 分支，.NET 8 用户升级到最新补丁版本后问题应消失</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="5-小结">5. 小结<a href="https://xiaoyeapp.com/zh-cn/blog/2026/09/23/dotnet-aot-deadlock-notes#5-%E5%B0%8F%E7%BB%93" class="hash-link" aria-label="5. 小结的直接链接" title="5. 小结的直接链接" translate="no">​</a></h2>
<ul>
<li class="">综上来看，这个问题<strong>不在你的代码</strong>，在 .NET 运行时 AOT 路径下的 ComWrappers 锁竞争</li>
<li class="">同时也与 JSON 解析无关，与“大量创建对象”这个行为有关</li>
<li class="">如果分批处理能规避，也只是降低概率</li>
<li class="">根治需要升级到包含修复的 .NET 运行时版本</li>
</ul>
<p><strong>参考链接</strong></p>
<ul>
<li class=""><a href="https://github.com/dotnet/runtime/issues/104582" target="_blank" rel="noopener noreferrer" class="">dotnet/runtime #104582</a></li>
<li class=""><a href="https://github.com/microsoft/microsoft-ui-xaml/issues/9928" target="_blank" rel="noopener noreferrer" class="">microsoft/microsoft-ui-xaml #9928</a></li>
<li class=""><a href="https://github.com/dotnet/runtime/commit/d7948dc" target="_blank" rel="noopener noreferrer" class="">dotnet/runtime 修复提交 d7948dc</a></li>
</ul>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label=".NET" term=".NET"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[利用WFP实现浏览访问域名重定向到指定 IP]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect"/>
        <updated>2026-08-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[做 Windows 网络开发，有时需要拦截特定域名的 DNS 查询，返回一个自定义的 IP 地址，从而实现流量引导、本地调试或访问控制。]]></summary>
        <content type="html"><![CDATA[<p>做 Windows 网络开发，有时需要拦截特定域名的 DNS 查询，返回一个自定义的 IP 地址，从而实现流量引导、本地调试或访问控制。</p>
<p>本文以拦截 <a href="http://www.abc.com/" target="_blank" rel="noopener noreferrer" class="">www.abc.com</a> 的 DNS A 查询为例，完整说明如何通过 WFP（Windows Filtering Platform）在传输层拦截 DNS 请求，并返回指定 IP（如 192.168.1.100）。重点讲配置流程和关键决策点，辅以必要的代码片段说明。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="整体流程">整体流程<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#%E6%95%B4%E4%BD%93%E6%B5%81%E7%A8%8B" class="hash-link" aria-label="整体流程的直接链接" title="整体流程的直接链接" translate="no">​</a></h3>
<p>整个方案分五步走：</p>
<ol>
<li class="">注册 Provider 和 SubLayer，建立自己的"地盘"</li>
<li class="">注册 Callout，绑定回调函数</li>
<li class="">添加过滤条件，只抓 UDP 53 端口的包</li>
<li class="">在回调里解析 DNS 请求，匹配域名后构造响应并注入</li>
<li class="">卸载时反序清理所有资源</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/cn-1-884d1f686fdcf6cd0e2138160112b504.png" width="784" height="276" class="img_ev3q"></p>
<!-- -->
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第一步创建-provider-和-sublayer">第一步：创建 Provider 和 SubLayer<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#%E7%AC%AC%E4%B8%80%E6%AD%A5%E5%88%9B%E5%BB%BA-provider-%E5%92%8C-sublayer" class="hash-link" aria-label="第一步：创建 Provider 和 SubLayer的直接链接" title="第一步：创建 Provider 和 SubLayer的直接链接" translate="no">​</a></h4>
<p>Provider 相当于"谁注册的规则"，SubLayer 则是给同一 Provider 下的过滤器排优先级。两者都是后续注册 Filter 和 Callout 的前置依赖。</p>
<p>创建 SubLayer 时，weight 值直接决定了我们的过滤器在同一个层里的优先级。设置为 0x7FFF 这样一个较高的值，可以确保我们的过滤规则在系统默认规则之前被评估，避免被 Windows 防火墙或其他第三方软件抢先处理。</p>
<p>这一步调用两个 API：FwpmProviderAdd 和 FwpmSubLayerAdd。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第二步注册-callout">第二步：注册 Callout<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#%E7%AC%AC%E4%BA%8C%E6%AD%A5%E6%B3%A8%E5%86%8C-callout" class="hash-link" aria-label="第二步：注册 Callout的直接链接" title="第二步：注册 Callout的直接链接" translate="no">​</a></h4>
<p>Callout 是 WFP 留给开发者注入自定义逻辑的"钩子"。</p>
<p>这里需要做两件事：</p>
<ol>
<li class=""><strong>内核注册</strong>（FwpsCalloutRegister）：把 classifyFn、notifyFn、flowDeleteFn 三个回调函数绑定到 Callout 上。classifyFn 是核心，每个匹配的包都会进来；notifyFn 处理 Callout 的生命周期事件；flowDeleteFn 用于清理流上下文。</li>
<li class=""><strong>管理层注册</strong>（FwpmCalloutAdd）：在过滤引擎的管理层注册这个 Callout，并指定它挂载的层。这里选择 FWPM_LAYER_OUTBOUND_TRANSPORT_V4。</li>
</ol>
<p>为什么选传输层而不选网络层？因为网络层（IPPACKET）虽然也能解析到 UDP 端口，但呈现的是完整的 IP 包，可能包含分片，需要自己处理分片重组。而传输层拿到的已经是分片重组后的完整 UDP 数据报，且能关联到进程信息，过滤条件更丰富，实现起来更省事。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第三步添加过滤条件">第三步：添加过滤条件<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#%E7%AC%AC%E4%B8%89%E6%AD%A5%E6%B7%BB%E5%8A%A0%E8%BF%87%E6%BB%A4%E6%9D%A1%E4%BB%B6" class="hash-link" aria-label="第三步：添加过滤条件的直接链接" title="第三步：添加过滤条件的直接链接" translate="no">​</a></h4>
<p>Callout 注册完还不会自动生效，必须添加一个 Filter 把它"激活"。</p>
<p>Filter 的核心是一组条件（Conditions）加上一个动作（Action）。我们需要两个条件：</p>
<ul>
<li class="">协议必须是 UDP（FWPM_CONDITION_IP_PROTOCOL == IPPROTO_UDP）</li>
<li class="">目的端口必须是 53（FWPM_CONDITION_IP_REMOTE_PORT == 53）</li>
</ul>
<p>动作设置为 FWP_ACTION_CALLOUT_TERMINATING，意思是：一旦匹配这两个条件，立即终止后续过滤器的处理，把包交给我们的 Callout。这样既保证了性能，也避免了和其他过滤器的冲突。</p>
<p>这一步调用 FwpmFilterAdd。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第四步准备注入资源">第四步：准备注入资源<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#%E7%AC%AC%E5%9B%9B%E6%AD%A5%E5%87%86%E5%A4%87%E6%B3%A8%E5%85%A5%E8%B5%84%E6%BA%90" class="hash-link" aria-label="第四步：准备注入资源的直接链接" title="第四步：准备注入资源的直接链接" translate="no">​</a></h4>
<p>伪造的 DNS 响应需要重新注入回网络栈，这需要两个基础设施：</p>
<ol>
<li class=""><strong>NET_BUFFER_LIST 池</strong>（NdisAllocateNetBufferListPool）：用于分配存放伪造数据包的内存结构。池化分配比每次都从零分配效率更高，对性能敏感的网络处理场景很重要。</li>
<li class=""><strong>注入句柄</strong>（FwpsInjectionHandleCreate）：创建一个传输层的注入句柄。这里选择 FWPS_INJECTION_TYPE_TRANSPORT，因为我们的伪造包是构造好的 UDP 数据，需要从传输层注入。之后调用 FwpsInjectTransportReceiveAsync 异步注入时就用这个句柄。</li>
</ol>
<p>这两个资源在初始化阶段一次性准备好，避免每次注入时重复创建开销。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第五步回调函数里做什么">第五步：回调函数里做什么<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#%E7%AC%AC%E4%BA%94%E6%AD%A5%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%E9%87%8C%E5%81%9A%E4%BB%80%E4%B9%88" class="hash-link" aria-label="第五步：回调函数里做什么的直接链接" title="第五步：回调函数里做什么的直接链接" translate="no">​</a></h4>
<p>当 DNS 请求命中过滤条件后，classifyFn 回调被调用。这个回调的函数原型是：</p>
<div class="language-c codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-c codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">typedef</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">NTAPI </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">FWPS_CALLOUT_CLASSIFY_FN2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    _In_ </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> FWPS_INCOMING_VALUES0</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> nFixedValues</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    _In_ </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> FWPS_INCOMING_METADATA_VALUES0</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> inMetaValues</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    _Inout_opt_ </span><span class="token keyword" style="color:#00009f">void</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> layerData</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    _In_opt_ </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> classifyContext</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    _In_ </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> FWPS_FILTER2</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> filter</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    _In_ UINT64 flowContext</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    _Inout_ FWPS_CLASSIFY_OUT0</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> classifyOut</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p>整个处理流程如下：</p>
<h5 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="51-提取包信息">5.1 提取包信息<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#51-%E6%8F%90%E5%8F%96%E5%8C%85%E4%BF%A1%E6%81%AF" class="hash-link" aria-label="5.1 提取包信息的直接链接" title="5.1 提取包信息的直接链接" translate="no">​</a></h5>
<p>从 inFixedValues 中取出远程地址、本地地址、端口、网卡索引等字段。对于 OUTBOUND_TRANSPORT_V4 层，可用的字段包括：</p>
<ul>
<li class="">FWPS_FIELD_OUTBOUND_TRANSPORT_V4_IP_REMOTE_ADDRESS：目的 IP</li>
<li class="">FWPS_FIELD_OUTBOUND_TRANSPORT_V4_IP_LOCAL_ADDRESS：源 IP</li>
<li class="">FWPS_FIELD_OUTBOUND_TRANSPORT_V4_IP_REMOTE_PORT：目的端口</li>
<li class="">FWPS_FIELD_OUTBOUND_TRANSPORT_V4_IP_LOCAL_PORT：源端口</li>
<li class="">FWPS_FIELD_OUTBOUND_TRANSPORT_V4_INTERFACE_INDEX：网卡索引</li>
</ul>
<p>这些信息在后续构造响应包时需要用到，特别是网卡索引关系到包从哪个网卡注入回去。</p>
<h5 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="52-提取并解析-dns-请求">5.2 提取并解析 DNS 请求<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#52-%E6%8F%90%E5%8F%96%E5%B9%B6%E8%A7%A3%E6%9E%90-dns-%E8%AF%B7%E6%B1%82" class="hash-link" aria-label="5.2 提取并解析 DNS 请求的直接链接" title="5.2 提取并解析 DNS 请求的直接链接" translate="no">​</a></h5>
<p>在 classifyFn 回调中，layerData 指向的是 NET_BUFFER_LIST 结构。通过 NdisGetDataBuffer 可以提取出完整的 UDP 数据报：</p>
<ul>
<li class="">UDP 头固定占 <strong>8 字节</strong>（源端口 2 字节 + 目的端口 2 字节 + 长度 2 字节 + 校验和 2 字节）</li>
<li class="">UDP 头后面紧跟着 <strong>DNS 消息</strong></li>
</ul>
<p>DNS 请求（QR=0）的格式如下：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">DNS Query (www.abc.com, A record)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                                     1  1  1  1  1  1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                      ID                     |   事务ID（与响应匹配）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |QR|   Opcode  |AA|TC|RD|RA| Z|AD|CD| RCODE   |   QR=0 表示查询</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    QDCOUNT                    |   查询区段数量（=1）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    ANCOUNT                    |   回答区段数量（=0）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    NSCOUNT                    |   授权区段数量（=0）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    ARCOUNT                    |   附加区段数量（=0）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                                               |</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    /                     QNAME                     /   域名（www.abc.com）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    /                                               /</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    QTYPE                      |   查询类型（A=1）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    QCLASS                     |   查询类（IN=1）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div></code></pre></div></div>
<p>QNAME 部分的编码方式是：每个标签以长度字节开头，后跟标签内容，最后以 0x00 结束。例如 <a href="http://www.abc.com/" target="_blank" rel="noopener noreferrer" class="">www.abc.com</a> 编码为：</p>
<table><thead><tr><th><strong>03</strong></th><th><strong>77</strong></th><th><strong>77</strong></th><th><strong>77</strong></th><th><strong>03</strong></th><th><strong>61</strong></th><th><strong>62</strong></th><th><strong>63</strong></th><th><strong>03</strong></th><th><strong>63</strong></th><th><strong>6f</strong></th><th><strong>6d</strong></th><th><strong>00</strong></th></tr></thead><tbody><tr><td><strong>3</strong></td><td>w</td><td>w</td><td>w</td><td>3</td><td>a</td><td>b</td><td>c</td><td>3</td><td>c</td><td>o</td><td>m</td><td>end</td></tr></tbody></table>
<p>先检查 DNS 头的 QR 位（第 3 字节的最高位）——如果是 1 表示这是 DNS 响应，直接跳过；只有 QR=0 的查询才需要处理。</p>
<p>然后解析 DNS 的 Question 区，提取出查询的域名。对于 <a href="http://www.abc.com/" target="_blank" rel="noopener noreferrer" class="">www.abc.com</a> 这样的域名，通过 RuleManagerMatch 判断是否匹配规则列表。</p>
<h5 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="53-检查查询类型并构造响应">5.3 检查查询类型并构造响应<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#53-%E6%A3%80%E6%9F%A5%E6%9F%A5%E8%AF%A2%E7%B1%BB%E5%9E%8B%E5%B9%B6%E6%9E%84%E9%80%A0%E5%93%8D%E5%BA%94" class="hash-link" aria-label="5.3 检查查询类型并构造响应的直接链接" title="5.3 检查查询类型并构造响应的直接链接" translate="no">​</a></h5>
<p>从 Question 区末尾取出 QTYPE（查询类型），判断是 A 记录（IPv4，QTYPE=1）还是 AAAA 记录（IPv6，QTYPE=28）。</p>
<p>收到 A 记录查询后，构造一个包含 192.168.1.100 的响应。需要在原请求基础上做以下修改：</p>
<p><strong>修改 DNS 头：</strong></p>
<table><thead><tr><th><strong>字段</strong></th><th><strong>原值</strong></th><th><strong>新值</strong></th><th><strong>说明</strong></th></tr></thead><tbody><tr><td><strong>QR</strong></td><td>0</td><td>1</td><td>改为响应</td></tr><tr><td><strong>Opcode</strong></td><td>0</td><td>0</td><td>保持不变</td></tr><tr><td><strong>AA</strong></td><td>0</td><td>1</td><td>设为权威回答</td></tr><tr><td><strong>RCODE</strong></td><td>0</td><td>0</td><td>无错误</td></tr><tr><td><strong>QDCOUNT</strong></td><td>1</td><td>1</td><td>保留原查询</td></tr><tr><td><strong>ANCOUNT</strong></td><td>0</td><td>1</td><td>新增 1 条回答</td></tr></tbody></table>
<p>DNS 响应（QR=1）的格式如下：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">DNS Response (www.abc.com -&gt; 192.168.1.100)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">                                    1  1  1  1  1  1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                      ID                     |   与请求的事务ID一致</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |QR|   Opcode  |AA|TC|RD|RA| Z|AD|CD| RCODE   |   QR=1, AA=1</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    QDCOUNT                    |   查询区段数量（=1）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    ANCOUNT                    |   回答区段数量（=1）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    NSCOUNT                    |   授权区段数量（=0）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    ARCOUNT                    |   附加区段数量（=0）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                                               |</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    /                     QNAME                     /   原样回显查询的域名</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    /                                               /</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    QTYPE                      |   原样回显（A=1）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    QCLASS                     |   原样回显（IN=1）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                                               |</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    /                     NAME                      /   响应区：原样回显域名</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    /                                               /</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    TYPE                       |   类型（A=1）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    CLASS                      |   类（IN=1）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    TTL                        |   生存时间（如 300 秒）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    RDLENGTH                   |   数据长度（IPv4=4）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                    RDATA                      |   192.168.1.100（4字节）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div></code></pre></div></div>
<p>RDATA 区存放 IP 地址，192.168.1.100 按网络序（大端）写为 C0 A8 01 64。</p>
<p>构造时需要在原请求的 DNS 头上做修改：翻转 QR 位，设置响应标志，填充 Answer 区。同时还要在数据前面封装 8 字节的 UDP 头，因为注入时要从传输层出发。</p>
<h5 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="54-封装-ip-头并注入">5.4 封装 IP 头并注入<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#54-%E5%B0%81%E8%A3%85-ip-%E5%A4%B4%E5%B9%B6%E6%B3%A8%E5%85%A5" class="hash-link" aria-label="5.4 封装 IP 头并注入的直接链接" title="5.4 封装 IP 头并注入的直接链接" translate="no">​</a></h5>
<p>构造好的 DNS 响应还需要在前面加上 UDP 头才能从传输层注入：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">UDP Header（8 字节）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |           源端口（DNS服务器=53）              |</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |           目的端口（客户端端口）              |</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |              UDP长度                          |</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |             UDP校验和                         |</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    |                 DNS响应（上面整段）            |</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+</span><br></div></code></pre></div></div>
<p>然后用 FwpsConstructIpHeaderForTransportPacket0 在 NBL 前面封装 IP 头：</p>
<div class="language-c codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-c codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">    status </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">FwpsConstructIpHeaderForTransportPacket0</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        pInjectNbl</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">          </span><span class="token comment" style="color:#999988;font-style:italic">// 包含 UDP+DNS 数据的 NBL</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">                   </span><span class="token comment" style="color:#999988;font-style:italic">// headerIncludeHeaderLength</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        AF_INET</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">             </span><span class="token comment" style="color:#999988;font-style:italic">// IPv4</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">UCHAR</span><span class="token operator" style="color:#393A34">*</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">srcIp</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// 源 IP（DNS 服务器地址）</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">UCHAR</span><span class="token operator" style="color:#393A34">*</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">dstIp</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// 目的 IP（客户端地址）</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        IPPROTO_UDP</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">         </span><span class="token comment" style="color:#999988;font-style:italic">// 协议类型</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">                   </span><span class="token comment" style="color:#999988;font-style:italic">// endpointHandle</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token constant" style="color:#36acaa">NULL</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">                </span><span class="token comment" style="color:#999988;font-style:italic">// controlData</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">                   </span><span class="token comment" style="color:#999988;font-style:italic">// controlDataLength</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">                   </span><span class="token comment" style="color:#999988;font-style:italic">// flags</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token constant" style="color:#36acaa">NULL</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">                </span><span class="token comment" style="color:#999988;font-style:italic">// reserved</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        interfaceIndex</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// 网卡索引</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        subInterfaceIndex    </span><span class="token comment" style="color:#999988;font-style:italic">// 子网卡索引</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p>封装完成后调用 FwpsInjectTransportReceiveAsync 异步注入。注入完成后的回调里负责释放 NBL 和之前分配的 DNS 响应数据内存。</p>
<h5 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="55-阻止原始包">5.5 阻止原始包<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#55-%E9%98%BB%E6%AD%A2%E5%8E%9F%E5%A7%8B%E5%8C%85" class="hash-link" aria-label="5.5 阻止原始包的直接链接" title="5.5 阻止原始包的直接链接" translate="no">​</a></h5>
<p>最后一步很重要：必须把 classifyOut-&gt;actionType 设置为 FWP_ACTION_BLOCK，同时设置 FWPS_CLASSIFY_OUT_FLAG_ABSORB 标志。</p>
<p>如果不阻止原始包，真实的 DNS 响应回来后会和伪造包冲突，导致应用程序拿到错误的 IP。设置这个标志后，WFP 会丢弃原始请求，只有伪造的响应包到达应用层。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第六步清理动作">第六步：清理动作<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#%E7%AC%AC%E5%85%AD%E6%AD%A5%E6%B8%85%E7%90%86%E5%8A%A8%E4%BD%9C" class="hash-link" aria-label="第六步：清理动作的直接链接" title="第六步：清理动作的直接链接" translate="no">​</a></h4>
<p>卸载驱动时，资源的释放顺序必须和初始化顺序<strong>严格相反</strong>：</p>
<ol>
<li class="">删除 Filter（FwpmFilterDeleteById）</li>
<li class="">删除用户态 Callout（FwpmCalloutDeleteByKey）</li>
<li class="">注销内核 Callout（FwpsCalloutUnregisterByKey）</li>
<li class="">删除 SubLayer（FwpmSubLayerDeleteByKey）</li>
<li class="">删除 Provider（FwpmProviderDeleteByKey）</li>
<li class="">释放 NBL 池（NdisFreeNetBufferListPool）</li>
<li class="">销毁注入句柄（FwpsInjectionHandleDestroy）</li>
</ol>
<p>任何一个步骤失败都可能导致资源泄漏，所以需要用状态标志记录是否有失败，但不建议因为某个步骤失败就停止后续清理，否则泄漏更严重。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="关键决策点总结">关键决策点总结<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#%E5%85%B3%E9%94%AE%E5%86%B3%E7%AD%96%E7%82%B9%E6%80%BB%E7%BB%93" class="hash-link" aria-label="关键决策点总结的直接链接" title="关键决策点总结的直接链接" translate="no">​</a></h3>
<table><thead><tr><th><strong>决策点</strong></th><th><strong>选择</strong></th><th><strong>原因</strong></th></tr></thead><tbody><tr><td><strong>过滤层</strong></td><td>OUTBOUND_TRANSPORT_V4</td><td>能同时拿到端口和 UDP 负载，适合 DNS 过滤</td></tr><tr><td><strong>SubLayer 权重</strong></td><td>0x7FFF</td><td>高优先级，确保先于系统规则被评估</td></tr><tr><td><strong>Filter 动作</strong></td><td>CALLOUT_TERMINATING</td><td>命中后终止后续处理，提升性能</td></tr><tr><td><strong>注入类型</strong></td><td>TRANSPORT</td><td>构造的是 UDP 数据，从传输层注入最自然</td></tr><tr><td><strong>响应构造</strong></td><td>处理 A</td><td>简化示例，实际可处理AAAA记录，可扩展支持其他类型</td></tr></tbody></table>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="注意事项">注意事项<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/23/wfp-domain-redirect#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" class="hash-link" aria-label="注意事项的直接链接" title="注意事项的直接链接" translate="no">​</a></h3>
<ol>
<li class=""><strong>异步注入</strong>：注入用异步接口，需要正确实现完成回调，在回调里释放 NBL 和响应数据，否则内存泄漏。</li>
<li class=""><strong>MDL 生命周期</strong>：IoAllocateMdl 分配的 MDL 在注入完成后要释放，时机在完成回调里。</li>
<li class=""><strong>NBL 所有权</strong>：FwpsInjectTransportReceiveAsync 调用后，NBL 的所有权转移给 WFP，不能手动释放。但 DNS 响应数据（completionContext）需要自己在完成回调里释放。</li>
<li class=""><strong>内存分配</strong>：构造 DNS 响应数据时用 NonPagedPoolNx 而非 NonPagedPool。一方面，classifyFn 回调可能在 DISPATCH_LEVEL 下执行，在该级别只能访问非分页内存；另一方面，NonPagedPoolNx 额外标记了不可执行（NX），这是微软推荐的安全做法，能防止缓冲区溢出后执行恶意代码。</li>
<li class=""><strong>只拦截 UDP</strong>：TCP 的 DNS 请求（DoH、DoT）不经过这个过滤逻辑，需要额外的层来处理。</li>
</ol>
<ul>
<li class="">如果您有 Windows 网络过滤、流量拦截、IP重定向等相关功能需求，欢迎随时咨询合作。</li>
</ul>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="网络" term="网络"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[WFP：Windows 网络过滤的“万能插线板”]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/08/05/wfp-basic</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/08/05/wfp-basic"/>
        <updated>2026-08-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[做 Windows 网络开发，特别是防火墙、VPN、网络监控这类东西，WFP（Windows Filtering Platform）是绕不开的。不过一说起驱动、内核、Callout，确实容易让人头大。]]></summary>
        <content type="html"><![CDATA[<p>做 Windows 网络开发，特别是防火墙、VPN、网络监控这类东西，WFP（Windows Filtering Platform）是绕不开的。不过一说起驱动、内核、Callout，确实容易让人头大。</p>
<p>这篇文章<strong>不讲复杂的 API 细节</strong>，只希望用最通俗的方式，把“WFP 是什么、能干什么、内部怎么回事”讲明白。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="wfp-到底是干嘛的">WFP 到底是干嘛的？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/05/wfp-basic#wfp-%E5%88%B0%E5%BA%95%E6%98%AF%E5%B9%B2%E5%98%9B%E7%9A%84" class="hash-link" aria-label="WFP 到底是干嘛的？的直接链接" title="WFP 到底是干嘛的？的直接链接" translate="no">​</a></h3>
<p>一句话概括：<strong>WFP 是 Windows 内核网络协议栈里的一个“万能插线板”。</strong></p>
<p>它把网络数据流经的各个关键节点都预留了“插孔”（也就是过滤层），你可以把自己的处理逻辑（“插头”）插上去，实现对网络流量的<strong>拦截、检查、修改</strong>和<strong>放行/丢弃</strong>控制。</p>
<p>Windows 自带的防火墙，就是微软自己在这些“插孔”上插的“插头”。杀毒软件、家长控制、流量监控软件用的也是这套东西。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-1-00317f873e5d72ed467f16b3b9f1a2d2.png" width="902" height="498" class="img_ev3q"></p>
<!-- -->
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="为什么要用-wfp">为什么要用 WFP？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/05/wfp-basic#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E7%94%A8-wfp" class="hash-link" aria-label="为什么要用 WFP？的直接链接" title="为什么要用 WFP？的直接链接" translate="no">​</a></h3>
<p>在 WFP 出现之前，做网络过滤有几种老办法，比如 TDI 过滤、NDIS 中间层驱动、Winsock LSP 等等。这些技术各有各的问题：</p>
<ul>
<li class="">有的只能管到某一段，没法全程控制；</li>
<li class="">有的不兼容 IPv6 等新协议；</li>
<li class="">有的和系统更新经常打架。</li>
</ul>
<p><strong>WFP 最大的价值，就是把 Windows 网络过滤这件事统一、标准化了</strong>。从 Vista/Server 2008 开始，它成了新一代防火墙和网络处理程序的基石。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="wfp-的四大件">WFP 的“四大件”<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/05/wfp-basic#wfp-%E7%9A%84%E5%9B%9B%E5%A4%A7%E4%BB%B6" class="hash-link" aria-label="WFP 的“四大件”的直接链接" title="WFP 的“四大件”的直接链接" translate="no">​</a></h3>
<p>WFP 的体系结构大致可以理解为四个角色在分工协作：</p>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="589" height="372" class="img_ev3q"></p>
<ol>
<li class=""><strong>垫片（Shims）：贴身的“情报员”</strong></li>
</ol>
<p>这是嵌入在系统 TCP/IP 协议栈各层的内核模块，它们负责把经过的数据拦截下来，包装成 WFP 能理解的格式，然后交给过滤引擎做判断。</p>
<p>不同的垫片负责不同层次的流量，比如负责应用程序连接的 ALE 垫片、负责传输层数据的垫片、负责网络层的垫片等。你不用管垫片具体怎么写，它们是 WFP 框架自带的。</p>
<ol start="2">
<li class=""><strong>过滤引擎（Filter Engine）：核心的“裁判”</strong></li>
</ol>
<p>这是真正干活的核心。它横跨内核态和用户态，里面分了大概<strong>50个内核层和10个用户层</strong>，数据在不同阶段会流经不同的层。</p>
<p>每个层内部又有<strong>子层（Sub-layer）<strong>和</strong>过滤器（Filter）</strong>。每个过滤器其实就是一条规则，比如“如果数据包的目标端口是 80，就放行”。当数据进来，过滤引擎会按优先级一条条比对规则，给出“允许”或“阻止”的判决。</p>
<ol start="3">
<li class=""><strong>基本筛选引擎（BFE）：背后的“总调度”</strong></li>
</ol>
<p>BFE 是一个运行在用户态的系统服务（Base Filtering Engine），是整个 WFP 的管理和控制中心。</p>
<p>它主要干几件事：接收上层应用（比如防火墙管理界面）添加/删除规则的命令；对不同来源的策略做仲裁；把 IPsec 等策略配置分发出去。总之，<strong>BFE 负责“下命令”，过滤引擎负责“执行”</strong>。</p>
<ol start="4">
<li class=""><strong>标注（Callouts）：留给开发者的“自定义钩子”</strong></li>
</ol>
<p>这就是 WFP 最灵活的地方。内置的“允许/阻止”规则不够用？你可以自己写一个<strong>标注驱动（Callout Driver）</strong>，注册一个或多个回调函数（Callout）。</p>
<p>你可以把这个标注挂在任何一个内核层上。当一个数据包匹配了使用该标注的过滤器时，你的 classifyFn 函数就会被调用。在里面你可以做：</p>
<ul>
<li class=""><strong>深度包检测</strong>：检查数据内容里有没有病毒特征。</li>
<li class=""><strong>数据包修改</strong>：比如做 NAT，改写 IP 地址和端口。</li>
<li class=""><strong>流修改</strong>：比如家长控制，替换或移除数据流里的敏感词。</li>
<li class=""><strong>日志记录</strong>：记录所有被拦截的流量。</li>
</ul>
<p>有了 Callout，WFP 就不再只是一个“开关”，而是变成了一个可以深度编程的网络处理平台。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="wfp-是怎么分层的">WFP 是怎么分层的？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/05/wfp-basic#wfp-%E6%98%AF%E6%80%8E%E4%B9%88%E5%88%86%E5%B1%82%E7%9A%84" class="hash-link" aria-label="WFP 是怎么分层的？的直接链接" title="WFP 是怎么分层的？的直接链接" translate="no">​</a></h3>
<p>WFP 的分层是和 TCP/IP 协议栈对应的，从应用层数据一直到网卡出去的裸包，都有对应的过滤点。下面用<strong>发送一个 TCP 数据包</strong>的例子简单串一下：</p>
<ol>
<li class=""><strong>应用层（ALE 层）</strong>：应用程序调用 send()，数据刚进内核。ALE_AUTH_CONNECT 层会被触发，这里是“连接授权”阶段，可以拿到进程 PID、程序路径、目的 IP/端口等信息。<strong>这是做“应用程序防火墙”最关键的层</strong>。</li>
<li class=""><strong>传输层（TRANSPORT 层）</strong>：TCP 包已经生成，但还没分片。在 OUTBOUND_TRANSPORT_V4 层可以拿到完整的 TCP 头和负载数据。</li>
<li class=""><strong>网络层（IPPACKET 层）</strong>：IP 包已经封装好，可能已经被分片了。在 OUTBOUND_IPPACKET_V4 层可以拿到 IP 头。<strong>这一层已经没有进程信息了</strong>，适合做 IP 级的过滤和 VPN 隧道封装。</li>
</ol>
<p>如果数据是从网卡收上来的，顺序正好反过来，从 INBOUND_IPPACKET_V4 → INBOUND_TRANSPORT_V4 → ALE_AUTH_RECV_ACCEPT，一路向上。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="使用时怎么选层">使用时怎么选层？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/05/wfp-basic#%E4%BD%BF%E7%94%A8%E6%97%B6%E6%80%8E%E4%B9%88%E9%80%89%E5%B1%82" class="hash-link" aria-label="使用时怎么选层？的直接链接" title="使用时怎么选层？的直接链接" translate="no">​</a></h3>
<p>不同的开发目标，选不同的层，以下整理了常用的分层处理类别：</p>
<table><thead><tr><th><strong>你想做什么</strong></th><th><strong>推荐层</strong></th><th><strong>理由</strong></th></tr></thead><tbody><tr><td><strong>禁止某程序联网、按进程控制</strong></td><td>ALE_AUTH_CONNECT / ALE_AUTH_RECV_ACCEPT</td><td>能拿到完整的进程信息，且只处理连接的第一个包，性能好</td></tr><tr><td><strong>分析 HTTP 请求、检测 SQL 注入</strong></td><td>STREAM 层（TCP 专用）</td><td>数据已经过 TCP 重组，拿到的是连续的应用层数据流，方便解析</td></tr><tr><td><strong>分析 DNS 包（UDP）</strong></td><td>DATAGRAM 层（UDP 专用）</td><td>直接拿到完整的 UDP 数据报，适合 DNS 过滤</td></tr><tr><td><strong>IP 级防火墙、VPN 隧道</strong></td><td>IPPACKET 层</td><td>最底层拦截，但也失去了进程和端口信息</td></tr></tbody></table>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="小结">小结<a href="https://xiaoyeapp.com/zh-cn/blog/2026/08/05/wfp-basic#%E5%B0%8F%E7%BB%93" class="hash-link" aria-label="小结的直接链接" title="小结的直接链接" translate="no">​</a></h3>
<p>WFP 是 Windows 下做网络过滤的“正路”。它把网络协议栈的关键节点都开放出来，让你能用标准化的方式去拦截和处理流量。</p>
<p>虽然写标注驱动还是要啃 WDK 文档，但理解 WFP 这个“插线板”模型，基本概念就清晰了：<strong>数据在协议栈里跑，经过一个个“插孔”（层），你的“插头”（Callout）就在那里干活</strong>，告诉系统这个包是放行、丢弃、还是修改。</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="网络" term="网络"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[两台直连PC可以跨网段互通啦]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/07/23/pcs-across-subnets</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/07/23/pcs-across-subnets"/>
        <updated>2026-07-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[各位网工、运维老哥、以及被VLAN逼疯的同学们，请留步！]]></summary>
        <content type="html"><![CDATA[<p><strong>各位网工、运维老哥、以及被VLAN逼疯的同学们，请留步！</strong></p>
<p>今天咱们聊一个反常识的骚操作。在你以往的认知里，是不是觉得：<strong>两台电脑拿网线直连，想互通？那必须得设成同一个网段啊！</strong>（比如192.168.1.x 和 192.168.1.y）</p>
<p>没错，这是“政治正确”的做法。但生活嘛，总有那么些“逆反”时刻：</p>
<ul>
<li class="">比如你手头这台PC是<strong>固定IP</strong>（10.10.10.5），另一台是<strong>自动获取</strong>的（192.168.1.3），你就是不想改来改去。</li>
<li class="">比如你就是单纯想<strong>测试</strong>一下三层转发，不想搭复杂的路由器。</li>
<li class="">再比如，你就想<strong>气气</strong>那些说“必须同网段”的老学究。</li>
</ul>
<p>今天，我就带你打破这个魔咒。<strong>两台PC直连，即使IP不在一个网段，照样能ping通！</strong> 而且不需要额外的路由器，全靠Windows自带的“软路由”功能。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/1-6423251f9b9809546f226b1349d7aa73.png" width="956" height="390" class="img_ev3q"></p>
<!-- -->
<p><strong>第一步：硬件连线（这步要是不会，建议直接退网）</strong></p>
<p>找一根<strong>交叉线</strong>？<strong>大错特错！</strong> 那是上古时期（2000年）的规矩了。</p>
<p>现在随便找根<strong>普通的直通网线</strong>，一头捅进PC-A的网口，另一头捅进PC-B的网口。插上之后，你会看到网口的小灯“bling bling”闪起来，说明物理链路已经准备好了。</p>
<p><strong>第二步：配置双方的“身份证”（IP地址）</strong></p>
<p>咱们得定两个“派别”：</p>
<ul>
<li class=""><strong>PC-A（甲方）：</strong> IP设为 192.168.1.3，子网掩码 255.255.255.0</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/2-64f99103119fa2d1eab515cf38c728f5.png" width="532" height="240" class="img_ev3q"></p>
<ul>
<li class=""><strong>PC-B（乙方）：</strong> IP设为 10.10.10.5，子网掩码 255.255.255.0</li>
</ul>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="432" height="229" class="img_ev3q"></p>
<p><strong>注意看！</strong> 一个192.168.1.x网段，一个10.10.10.x网段。如果按常规操作，这时候你在A电脑上ping 10.10.10.5，系统会告诉你：“<strong>目标不可达</strong>”，因为系统觉得这俩货根本不熟。</p>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="418" height="163" class="img_ev3q"></p>
<p><strong>重点来了，怎么让他们“破冰”认识？</strong></p>
<p><strong>第三步：给电脑开启“上帝视角”（添加静态路由）</strong></p>
<p>既然A和B不认识，那我们就在它们的大脑里强行画一张地图——<strong>告诉它们：去找对方的时候，走“直连”这条路，别去问网关！</strong></p>
<p><strong>在 PC-A（192.168.1.10）上操作：</strong></p>
<p>打开命令提示符（CMD），输入以下“咒语”：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">route add 10.10.10.0 mask 255.255.255.0 192.168.1.3</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="596" height="93" class="img_ev3q"></p>
<p><strong>翻译成人话：</strong> “A同学，以后只要是想找10.10.10.x的人，不用问别人，<strong>你自己就是带路的</strong>，直接从你这张网卡发出去就行！”</p>
<p><strong>在 PC-B（10.10.10.5）上操作：</strong></p>
<p>同样打开CMD，输入对应的“回礼”：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">route add 192.168.1.0 mask 255.255.255.0 10.10.10.5</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="591" height="90" class="img_ev3q"></p>
<p><strong>翻译成人话：</strong> “B同学，以后找192.168.1.x的人，<strong>你也别怂，直接从你网卡扔出去</strong>！”</p>
<p><strong>第四步：见证奇迹（并且永久保存）</strong></p>
<p>现在，你再在A上ping一下B：</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">ping 10.10.10.5</span><br></div></code></pre></div></div>
<p><strong>Duang！</strong> 你会看到<code> 来自 10.10.10.5的回复：字节=32 时间&lt;1ms TTL=128</code>。</p>
<p>通了！完全通了！这时候你可以<strong>共享文件夹、传大文件、甚至联机打红警</strong>，一点毛病没有。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/7-e28b0ea355277d03f452ffc254392f24.png" width="463" height="443" class="img_ev3q"></p>
<p><strong>⚠️ 温馨提示（防坑指南）</strong></p>
<ol>
<li class=""><strong>重启会失效：</strong> 上面加的 route add 只是临时的，电脑一重启就没了。如果想永久生效，请把命令改成 route -p add（Windows）。</li>
<li class=""><strong>关闭防火墙！关闭防火墙！关闭防火墙！</strong> 重要的事情说三遍。Windows自带的防火墙默认允许同网段的ICMP（ping包），拒绝来自不同子网的ICMP（ping包），如果不关，你上面折腾半天，它照样给你回“请求超时”。<strong>建议直接关掉域防火墙和专用防火墙测试。</strong></li>
<li class=""><strong>子网掩码写大一点：</strong> 如果你想把整个网段都指过去，掩码用 255.255.255.0；如果你只想让<strong>这一台机器</strong>通，可以把掩码写成 255.255.255.255（主机路由），精确制导。</li>
</ol>
<p><strong>写在最后</strong></p>
<p>怎么样？是不是感觉打开了新世界的大门？</p>
<p>这招在<strong>服务器割接临时过渡</strong>、<strong>没有交换机的小组内网</strong>、或者<strong>纯粹想秀一把技术</strong>的时候，简直不要太好用。</p>
<p><strong>记住：</strong> 技术是死的，人是活的。谁说直连就必须同网段？只要路由指得对，天涯海角都给你ping通！</p>
<p>好了，不说了，我去拿这个忽悠隔壁工位的产品经理了。兄弟们，快去试试吧，回来报个到！</p>
<p><strong>如果没通，请检查第三步的IP有没有抄错，或者防火墙是不是又偷偷更新开了。</strong> 拜了个拜！👋</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="网络" term="网络"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[WireGuard在Windows上的基本使用]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/07/07/wireguard-windows</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/07/07/wireguard-windows"/>
        <updated>2026-07-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[WireGuard 以其简洁、高效和安全性著称，在 Windows 平台上的官方客户端也延续了这一特点。与 Linux 下的命令行操作不同，Windows 版本更侧重于图形化管理与隧道切换，配置逻辑主要围绕生成密钥对和编辑.conf文件展开。]]></summary>
        <content type="html"><![CDATA[<p>WireGuard 以其简洁、高效和安全性著称，在 Windows 平台上的官方客户端也延续了这一特点。与 Linux 下的命令行操作不同，Windows 版本更侧重于<strong>图形化管理</strong>与<strong>隧道切换</strong>，配置逻辑主要围绕生成密钥对和编辑.conf文件展开。</p>
<p><img decoding="async" loading="lazy" alt="0.wireguard" src="https://xiaoyeapp.com/zh-cn/assets/images/0.wireguard-f5dde7d9a5973a0ee123025ef7f0dc5c.png" width="800" height="460" class="img_ev3q"></p>
<!-- -->
<p>以下配置基于两台 Windows 设备，<strong>节点 A</strong> 拥有公网 IP（或已配置端口映射），作为“中心节点”等待连接；<strong>节点 B</strong> 处于内网，主动连接节点 A，实现两者互通。配置的核心逻辑是：A 负责“等待连接”，B 负责“找到 A”，这里的“等待连接”并非真正建立连接，而是B通过主动发送数据包并建立保活机制来维持二者之间的数据通道，当B主动发送数据包给A时，B也会在路由器公网端留下自己的外部端口，这样A也可以反向给B回应数据。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-前期准备安装与生成密钥">1. 前期准备：安装与生成密钥<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/07/wireguard-windows#1-%E5%89%8D%E6%9C%9F%E5%87%86%E5%A4%87%E5%AE%89%E8%A3%85%E4%B8%8E%E7%94%9F%E6%88%90%E5%AF%86%E9%92%A5" class="hash-link" aria-label="1. 前期准备：安装与生成密钥的直接链接" title="1. 前期准备：安装与生成密钥的直接链接" translate="no">​</a></h3>
<p><strong>1-1. 两台 Windows 设备</strong>：节点 A（有公网 IP）、节点 B（在内网，能上网就行）。</p>
<p><strong>1-2. 安装 WireGuard 客户端</strong>：目前官网被屏蔽，从国内一些软件网站上可以找到，但是要注意保证只在国内使用，比如从家里到公司这种，否则涉及跨境转发同样会被屏蔽。</p>
<p><strong>1-3. 确认 A 的端口可达</strong>：A 上要放行一个 UDP 端口（比如6000），需要在 Windows 防火墙中添加入站规则。如果 A 前面还有路由器，需要在路由器上做端口映射，把公网 IP 的6000 映射到 A 的内网 IP。</p>
<p><strong>1-4. 准备记录公钥</strong>：配置过程中需要互相复制对方的公钥，建议提前打开记事本备用。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-配置节点-a公网节点">2. 配置节点 A（公网节点）<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/07/wireguard-windows#2-%E9%85%8D%E7%BD%AE%E8%8A%82%E7%82%B9-a%E5%85%AC%E7%BD%91%E8%8A%82%E7%82%B9" class="hash-link" aria-label="2. 配置节点 A（公网节点）的直接链接" title="2. 配置节点 A（公网节点）的直接链接" translate="no">​</a></h3>
<p>节点 A 的核心作用是<strong>监听一个公网可达的 UDP 端口</strong>，等待 B 来连接。同时给自己分配一个虚拟 IP，用于后续在虚拟网络中标识自己。</p>
<p><strong>编辑配置文件</strong>：在A WireGuard 主界面选择节点隧道，点击“编辑”，添加内容如下，</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/1-3b7c137e4062912205eefab6b645c445.png" width="486" height="393" class="img_ev3q"></p>
<p>其中Public Key和Privacy Key是自动生成的密钥对，我们只需配置监听端口和自身虚拟地址即可；</p>
<p>Address 指定了节点 A 在虚拟网络内的 IP；ListenPort 是 A 监听的端口，需要确保此端口在 Windows 防火墙及路由器（如有）中放行。</p>
<p>保存完成后的形式如下，这里配置尚未结束，待会还要添加节点B的公钥。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/2-a5eabd7066dbca4f8679720c6ed38add.png" width="623" height="393" class="img_ev3q"></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-配置节点-b客户端节点">3. 配置节点 B（客户端节点）<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/07/wireguard-windows#3-%E9%85%8D%E7%BD%AE%E8%8A%82%E7%82%B9-b%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%8A%82%E7%82%B9" class="hash-link" aria-label="3. 配置节点 B（客户端节点）的直接链接" title="3. 配置节点 B（客户端节点）的直接链接" translate="no">​</a></h3>
<p>节点 B 作为主动发起连接的设备，需要知道自己要连接谁以及自己的虚拟 IP。</p>
<p><strong>编辑配置文件</strong>：同样在 WireGuard 主界面选择节点 B 的隧道，点击“编辑”，添加内容如下：</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/3-cfd67ee63462c3420c1356a0ec5879c2.png" width="486" height="393" class="img_ev3q"></p>
<p>其中，PrivateKye和PublicKey是自动生成的，Address是自己设置的；</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-添加对方到自己的peer中">4. 添加对方到自己的Peer中<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/07/wireguard-windows#4-%E6%B7%BB%E5%8A%A0%E5%AF%B9%E6%96%B9%E5%88%B0%E8%87%AA%E5%B7%B1%E7%9A%84peer%E4%B8%AD" class="hash-link" aria-label="4. 添加对方到自己的Peer中的直接链接" title="4. 添加对方到自己的Peer中的直接链接" translate="no">​</a></h3>
<p>前面A 和 B都有了自己的密钥对，接下来需要把他们添加到对方的Public Key到自己的Peer列表中，添加后的形式如下：</p>
<p>节点A：</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/4-4353d7c8e916e575ff4eea8e87da7fdc.png" width="486" height="393" class="img_ev3q"></p>
<p>节点B：</p>
<p>节点B作为连接主动发起端，下面添加了两项额外配置，Endpoint和PersistentKeepalive；</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/5-930f93bcda57dc3278d6ea7428945cdc.png" width="486" height="393" class="img_ev3q"></p>
<p>Endpoint 填写节点 A 的公网 IP 和监听端口；</p>
<p>AllowedIPs = 10.10.10.1/24 用于控制Wireguard驱动的出站/入站方向的报文匹配规则；</p>
<p>PersistentKeepalive = 25 确保 B 每隔 25 秒发送保活包，以维持 NAT 映射，让 A 能主动向 B 发送数据。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="5-启动并验证连接">5. 启动并验证连接<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/07/wireguard-windows#5-%E5%90%AF%E5%8A%A8%E5%B9%B6%E9%AA%8C%E8%AF%81%E8%BF%9E%E6%8E%A5" class="hash-link" aria-label="5. 启动并验证连接的直接链接" title="5. 启动并验证连接的直接链接" translate="no">​</a></h3>
<p><strong>启动顺序</strong>：先连接节点 A（公网节点），再连接节点 B。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/6-50e9e540358d1ad770b25112eddee2ca.png" width="659" height="332" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/7-b33accbe8fd9b2ef4e15f83a9ac4ad79.png" width="623" height="356" class="img_ev3q"></p>
<p><strong>验证方法</strong>：在节点A和节点B上分别ping对方的虚拟ip，可以正常通；</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/8-6ffda0c3fd3885b8280fb522fe57cc26.png" width="582" height="262" class="img_ev3q"></p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="网络" term="网络"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[小烨远控3.0.5：HTTP共享让文件分享更简单]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare"/>
        <updated>2026-07-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[我们很高兴宣布，小烨远控3.0.5 版本正式发布！本次更新带来了一项备受期待的核心功能——HTTP共享，让您在不同设备间分享文件变得前所未有的简单和灵活。]]></summary>
        <content type="html"><![CDATA[<p>我们很高兴宣布，<strong>小烨远控3.0.5</strong> 版本正式发布！本次更新带来了一项备受期待的核心功能——<strong>HTTP共享</strong>，让您在不同设备间分享文件变得前所未有的简单和灵活。</p>
<!-- -->
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="什么是http共享">什么是HTTP共享？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare#%E4%BB%80%E4%B9%88%E6%98%AFhttp%E5%85%B1%E4%BA%AB" class="hash-link" aria-label="什么是HTTP共享？的直接链接" title="什么是HTTP共享？的直接链接" translate="no">​</a></h3>
<p>HTTP共享是小烨远控提供的一键式文件分享功能。当您启动服务后，可以在映射列表中添加文件，其他人就能通过您生成的HTTP链接，轻松访问您所共享的文件。</p>
<p><strong>适用场景广泛</strong>：无论是在家庭、办公室的<strong>局域网</strong>，还是通过小烨远控构建的<strong>虚拟子网</strong>，甚至是在<strong>更广泛的网络环境</strong>下，您都可以快速实现文件分享。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="如何使用http共享">如何使用HTTP共享？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8http%E5%85%B1%E4%BA%AB" class="hash-link" aria-label="如何使用HTTP共享？的直接链接" title="如何使用HTTP共享？的直接链接" translate="no">​</a></h3>
<p>整个流程设计得非常直观，几步即可完成：</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-运行小烨远控app">1. 运行小烨远控App<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare#1-%E8%BF%90%E8%A1%8C%E5%B0%8F%E7%83%A8%E8%BF%9C%E6%8E%A7app" class="hash-link" aria-label="1. 运行小烨远控App的直接链接" title="1. 运行小烨远控App的直接链接" translate="no">​</a></h4>
<p>启动小烨远控App，进入HTTP共享功能首页。默认情况下，服务处于停止状态，界面清晰简洁。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-cn-xiaoyeremote-http-01-2c64fefbc23532f27443aa13b4a12b60.png" width="1078" height="599" class="img_ev3q"></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-启动服务">2. 启动服务<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare#2-%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1" class="hash-link" aria-label="2. 启动服务的直接链接" title="2. 启动服务的直接链接" translate="no">​</a></h4>
<p>点击上方的 <strong>“启动”</strong> 按钮，服务启动完成后，您将看到服务正在运行的指示状态，表示已经准备好接收文件映射。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-cn-xiaoyeremote-http-02-45f02e5d030c0bfd3bc3f9bbba37ccc1.png" width="1078" height="599" class="img_ev3q"></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-添加文件进行分享">3. 添加文件进行分享<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare#3-%E6%B7%BB%E5%8A%A0%E6%96%87%E4%BB%B6%E8%BF%9B%E8%A1%8C%E5%88%86%E4%BA%AB" class="hash-link" aria-label="3. 添加文件进行分享的直接链接" title="3. 添加文件进行分享的直接链接" translate="no">​</a></h4>
<p>您可以通过两种方式添加要分享的文件或目录：</p>
<ul>
<li class=""><strong>直接拖拽</strong>：将文件或文件夹直接拖拽到Uri映射表区域</li>
<li class=""><strong>手动添加</strong>：点击 <strong>“添加文件”</strong> 或 <strong>“添加目录”</strong> 按钮，在文件管理器窗口中选择</li>
</ul>
<p>您可以根据需要灵活添加多个文件或整个文件夹，构建自己的分享列表。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-在浏览器中查看">4. 在浏览器中查看<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare#4-%E5%9C%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%AD%E6%9F%A5%E7%9C%8B" class="hash-link" aria-label="4. 在浏览器中查看的直接链接" title="4. 在浏览器中查看的直接链接" translate="no">​</a></h4>
<p>添加完成后，点击 <strong>“浏览器打开”</strong> 操作，您将看到一个基本的文件共享列表页面。</p>
<p><strong>局域网访问</strong>：如果另一台设备和您的设备处于同一局域网，只需在浏览器中输入<code> http://&lt;您的局域网IP&gt;</code> 即可访问并下载文件。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-cn-xiaoyeremote-http-03-6cfebade9484d57969c7d85ed2b427ae.png" width="1058" height="459" class="img_ev3q"></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="5-在子网或公共网络分享">5. 在子网或公共网络分享<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare#5-%E5%9C%A8%E5%AD%90%E7%BD%91%E6%88%96%E5%85%AC%E5%85%B1%E7%BD%91%E7%BB%9C%E5%88%86%E4%BA%AB" class="hash-link" aria-label="5. 在子网或公共网络分享的直接链接" title="5. 在子网或公共网络分享的直接链接" translate="no">​</a></h4>
<p>您可能还想通过其他网络环境访问共享文件，小烨远控为您提供了更灵活的方案：</p>
<ol>
<li class=""><strong>登录账号</strong>：请先点击左上角头像，登录小烨通行者账号</li>
<li class=""><strong>开启子网/外网</strong>：登录完成后返回HTTP共享页面，点击 <strong>“子网/外网”</strong> 的开启按钮</li>
<li class=""><strong>获取访问链接</strong>：开启完毕后，您将会看到两种链接：</li>
</ol>
<ul>
<li class=""><strong>子网Uri</strong>：使用同一小烨通行者账号登录的两台设备，或者加入同一网络组的两台设备之间可以相互访问，非常适合团队协作或多设备间同步</li>
<li class=""><strong>外网Uri</strong>：您可以在其他任意设备或手机上访问此链接（如果访问不通，稍等几秒刷新重试即可）</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="温馨提示">温馨提示<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare#%E6%B8%A9%E9%A6%A8%E6%8F%90%E7%A4%BA" class="hash-link" aria-label="温馨提示的直接链接" title="温馨提示的直接链接" translate="no">​</a></h3>
<p>为了您的数据安全，<strong>不需要分享的时候请及时关闭相关功能</strong>。小烨远控始终将您的隐私和安全放在首位。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="版本寄语">版本寄语<a href="https://xiaoyeapp.com/zh-cn/blog/2026/07/01/v305-httpshare#%E7%89%88%E6%9C%AC%E5%AF%84%E8%AF%AD" class="hash-link" aria-label="版本寄语的直接链接" title="版本寄语的直接链接" translate="no">​</a></h3>
<p>小烨远控3.0.5的HTTP共享功能，旨在为您提供一种<strong>简单、灵活、安全</strong>的文件分享方式。无论您是在家庭局域网中与家人共享照片，还是在办公环境中与同事协作传输文档，亦或是通过子网/外网功能实现更灵活的访问，HTTP共享都能让整个过程变得更加轻松高效。</p>
<p><strong>小烨远控3.0.5</strong> <strong>现已开放下载</strong>，欢迎访问官方网站或应用商店更新至最新版本，体验全新的HTTP共享功能！</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="动态" term="动态"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[.NET项目如何用gRPC？从零到跑通一个例子就够了]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/06/10/net-with-grpc</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/06/10/net-with-grpc"/>
        <updated>2026-06-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[分类：Network 发布日期：2026/6/10]]></summary>
        <content type="html"><![CDATA[<p>分类：Network 发布日期：2026/6/10</p>
<p>在微服务和云原生架构大行其道的今天，服务之间的通信效率成为系统性能的关键瓶颈。你是否还在为REST API的低效序列化而烦恼？是否在寻找一种既能跨语言又能保持高性能的通信方案？今天，跟随作者一起来认识gRPC，以及.NET生态如何完美支持这一现代RPC框架。</p>
<p>如果你对gRPC的概念有所了解，可以直接跳入第3章节；如果你对gRPC已经完全熟练掌握，那就可以完全跳过本文^=^</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="一什么是grpc为何它如此重要">一、什么是gRPC？为何它如此重要？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/06/10/net-with-grpc#%E4%B8%80%E4%BB%80%E4%B9%88%E6%98%AFgrpc%E4%B8%BA%E4%BD%95%E5%AE%83%E5%A6%82%E6%AD%A4%E9%87%8D%E8%A6%81" class="hash-link" aria-label="一、什么是gRPC？为何它如此重要？的直接链接" title="一、什么是gRPC？为何它如此重要？的直接链接" translate="no">​</a></h3>
<p><strong>gRPC</strong>是由Google开源的高性能远程过程调用框架，它基于HTTP/2协议，使用Protocol Buffers（protobuf）作为接口定义语言和数据序列化格式。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/net-grpc-1-0ecbddc0af0818eef9c71088e1febf22.png" width="552" height="327" class="img_ev3q"></p>
<!-- -->
<p><strong>gRPC的几个核心优势：</strong></p>
<ul>
<li class=""><strong>高性能</strong>：使用protobuf二进制序列化，相比JSON体积更小、速度更快</li>
<li class=""><strong>多语言支持</strong>：支持C++、Java、Python、Go、C#等多种语言</li>
<li class=""><strong>双向流式通信</strong>：基于HTTP/2，支持客户端、服务端双向流式传输</li>
<li class=""><strong>强类型</strong>：通过.proto文件明确定义接口，生成强类型代码</li>
<li class=""><strong>自动代码生成</strong>：提高开发效率，减少手动编写样板代码</li>
</ul>
<p><strong>gRPC的几种通信模式：</strong></p>
<ol>
<li class=""><strong>一元RPC</strong>：客户端发送单个请求，服务端返回单个响应，这种是最基本最常用的交互，完全可以媲美REST API接口调用；</li>
<li class=""><strong>服务端流式RPC</strong>：客户端发送请求，服务端返回流式响应</li>
<li class=""><strong>客户端流式RPC</strong>：客户端发送流式请求，服务端返回单个响应</li>
<li class=""><strong>双向流式RPC</strong>：双方同时发送流式消息</li>
</ol>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="二net对grpc的支持成熟且强大">二、.NET对gRPC的支持：成熟且强大<a href="https://xiaoyeapp.com/zh-cn/blog/2026/06/10/net-with-grpc#%E4%BA%8Cnet%E5%AF%B9grpc%E7%9A%84%E6%94%AF%E6%8C%81%E6%88%90%E7%86%9F%E4%B8%94%E5%BC%BA%E5%A4%A7" class="hash-link" aria-label="二、.NET对gRPC的支持：成熟且强大的直接链接" title="二、.NET对gRPC的支持：成熟且强大的直接链接" translate="no">​</a></h3>
<p>微软对gRPC的支持可以说是<strong>全力投入</strong>。从.NET Core 3.0开始，gRPC就成为.NET平台的一等公民。</p>
<p><strong>官方支持情况：</strong></p>
<table><thead><tr><th>组件</th><th>包名</th><th>用途</th></tr></thead><tbody><tr><td><strong>gRPC服务端</strong></td><td>Microsoft.AspNetCore.App（内置）</td><td>ASP.NET Core中创建gRPC服务</td></tr><tr><td><strong>gRPC客户端</strong></td><td>Grpc.Net.Client</td><td>.NET Core调用gRPC服务</td></tr><tr><td><strong>代码生成工具</strong></td><td><a href="https://grpc.tools/" target="_blank" rel="noopener noreferrer" class="">Grpc.Tools</a></td><td>从.proto文件生成C#代码</td></tr><tr><td><strong>Protobuf支持</strong></td><td>Google.Protobuf</td><td>Protocol Buffers序列化支持</td></tr></tbody></table>
<p><strong>.NET gRPC的技术特点：</strong></p>
<ul>
<li class=""><strong>完全托管实现</strong>：基于.NET原生实现，无需依赖C++库</li>
<li class=""><strong>与<a href="https://asp.net/" target="_blank" rel="noopener noreferrer" class="">ASP.NET</a> Core无缝集成</strong>：共享配置、日志、依赖注入等基础设施</li>
<li class=""><strong>性能优异</strong>：微软官方基准测试显示，gRPC性能远超传统REST API</li>
<li class=""><strong>跨平台支持</strong>：Windows、Linux、macOS均可完美运行</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="三实战演练创建完整的grpc服务与客户端">三、实战演练：创建完整的gRPC服务与客户端<a href="https://xiaoyeapp.com/zh-cn/blog/2026/06/10/net-with-grpc#%E4%B8%89%E5%AE%9E%E6%88%98%E6%BC%94%E7%BB%83%E5%88%9B%E5%BB%BA%E5%AE%8C%E6%95%B4%E7%9A%84grpc%E6%9C%8D%E5%8A%A1%E4%B8%8E%E5%AE%A2%E6%88%B7%E7%AB%AF" class="hash-link" aria-label="三、实战演练：创建完整的gRPC服务与客户端的直接链接" title="三、实战演练：创建完整的gRPC服务与客户端的直接链接" translate="no">​</a></h3>
<p>接下来跟随作者一块创建一个基本的gRPC示例，包含服务端和客户端。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="31-环境准备">3.1 环境准备<a href="https://xiaoyeapp.com/zh-cn/blog/2026/06/10/net-with-grpc#31-%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87" class="hash-link" aria-label="3.1 环境准备的直接链接" title="3.1 环境准备的直接链接" translate="no">​</a></h4>
<ul>
<li class="">Visual Studio 2022（需安装ASP.NET和Web开发工作负载，如下图所示）</li>
<li class="">.NET 6.0 SDK或更高版本</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/net-grpc-2-d14da9a7fbc459069e5fd2b963d4d21f.png" width="846" height="382" class="img_ev3q"></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="32-创建grpc服务端">3.2 创建gRPC服务端<a href="https://xiaoyeapp.com/zh-cn/blog/2026/06/10/net-with-grpc#32-%E5%88%9B%E5%BB%BAgrpc%E6%9C%8D%E5%8A%A1%E7%AB%AF" class="hash-link" aria-label="3.2 创建gRPC服务端的直接链接" title="3.2 创建gRPC服务端的直接链接" translate="no">​</a></h4>
<p><strong>步骤一：创建项目</strong></p>
<ol>
<li class="">启动Visual Studio，选择“创建新项目”</li>
<li class="">搜索“gRPC”，选择“ASP.NET Core gRPC 服务”</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/net-grpc-3-0e8bf5e12a20f99b41cc598dd631e280.png" width="755" height="206" class="img_ev3q"></p>
<ol>
<li class="">项目名称设为GrpcGreeter</li>
<li class="">选择.NET版本（推荐.NET 8.0或更高）</li>
</ol>
<p><strong>步骤二：查看项目结构</strong></p>
<p>创建完成后，可以看到以下两个核心文件：</p>
<ul>
<li class=""><strong>Protos/greet.proto</strong>：定义gRPC服务的接口文件，这里包含了一个请求/响应数据结构，一个接口函数SayHello；</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/net-grpc-4-e63ac384aacf6139e3dfb3cf431bd567.png" width="1003" height="520" class="img_ev3q"></p>
<ul>
<li class=""><strong>Services/GreeterService.cs</strong>：实现gRPC服务的业务逻辑</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/net-grpc-5-59ea0e9f2be62234e7a98afdde1cf58a.png" width="1113" height="617" class="img_ev3q"></p>
<p><strong>步骤三：运行服务端</strong></p>
<p>按F5运行服务，控制台会显示服务监听的地址，如<code>https://localhost:7208</code>。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/net-grpc-6-da53f6647d9fddc10ab6499651cde889.png" width="597" height="258" class="img_ev3q"></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="33-创建grpc客户端">3.3 创建gRPC客户端<a href="https://xiaoyeapp.com/zh-cn/blog/2026/06/10/net-with-grpc#33-%E5%88%9B%E5%BB%BAgrpc%E5%AE%A2%E6%88%B7%E7%AB%AF" class="hash-link" aria-label="3.3 创建gRPC客户端的直接链接" title="3.3 创建gRPC客户端的直接链接" translate="no">​</a></h4>
<p><strong>步骤一：创建控制台应用</strong></p>
<ol>
<li class="">另开一个Visual Studio实例</li>
<li class="">创建“控制台应用”项目，命名GrpcGreeterClient</li>
</ol>
<p>在客户端控制台项目中添加以下几个NuGet包，作用可以文章开头的描述；</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/net-grpc-7-53fc1bb01408b66b4a07d7973b5a565d.png" width="560" height="211" class="img_ev3q"></p>
<p><strong>步骤二：添加proto文件</strong></p>
<ol>
<li class="">在客户端项目中创建Protos文件夹，把服务端的greet.proto文件复制到该文件夹</li>
<li class="">修改greet.proto中的命名空间，修改是为了方便区分，不修改也不影响使用；</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/net-grpc-8-303ee13c85e38a4d00d9d4c175946321.png" width="988" height="280" class="img_ev3q"></p>
<p>编辑.csproj文件，将proto文件加入项目编译流程：</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="网络" term="网络"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[WinUI成Windows平台原生应用开发“默认选择”]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/06/04/build2026-winui</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/06/04/build2026-winui"/>
        <updated>2026-06-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[在刚结束的Build 2026开发者大会上，微软向全球Windows开发者传递了一个明确信号：原生应用的时代回来了，而WinUI就是那个核心引擎。]]></summary>
        <content type="html"><![CDATA[<p>在刚结束的Build 2026开发者大会上，微软向全球Windows开发者传递了一个明确信号：<strong>原生应用的时代回来了，而WinUI就是那个核心引擎</strong>。</p>
<p>尽管微软并未宣布放弃对Web技术或跨平台框架的支持，但在多场关键技术会议中，公司高层反复强调——<strong>WinUI已是Windows 11上构建现代化、高性能、AI就绪原生应用的首选框架</strong>。</p>
<p><strong>一、从“选项之一”到“生产平台”：微软为何全力押注WinUI？</strong></p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/build2026-winui-1-159d49b784680a9fce965711eec8608e.png" width="906" height="596" class="img_ev3q"></p>
<!-- -->
<p>过去几年，Windows应用生态呈现碎片化：Electron、React Native、Flutter、Tauri……开发者拥有众多选择，但系统体验也因此变得割裂——内存占用高、启动慢、界面风格不统一。</p>
<p>在Build 2026上，微软Windows UI与人工智能副总裁Chris Anderson明确回应了社区最关心的问题：“<strong>我们不会构建另一个新框架。WinUI就是Windows应用的生产平台。</strong>”</p>
<p>为此，微软甚至去掉了“3”这个版本号，将其简化为“<strong>WinUI</strong>”，以此承诺：</p>
<ul>
<li class="">不会进行破坏性重构</li>
<li class="">不会轻易放弃或替换</li>
<li class="">长期稳定投入，适合企业级应用</li>
</ul>
<p><strong>二、打磨基本功：解决撕裂、内存与控件缺口</strong></p>
<p>过去开发者对WinUI的主要顾虑集中在<strong>基础体验</strong>和<strong>企业控件缺失</strong>。而微软本次给出了具体路线图：</p>
<table><thead><tr><th>痛点</th><th>微软的承诺与行动</th></tr></thead><tbody><tr><td>窗口调整时出现黑色边框/撕裂</td><td>全面转向系统级合成器，修复底层渲染</td></tr><tr><td>内存占用偏高</td><td>已投入工程资源优化内存使用模式</td></tr><tr><td>缺乏数据表格(DataGrid)、图表(Charts)</td><td>确认即将推出，优先满足企业场景</td></tr><tr><td>版本迭代风险</td><td>淡化版本号，保持长期兼容</td></tr></tbody></table>
<p>“首要任务是提升性能、夯实基础、确保质量，并修复大量缺陷。” —— Chris Anderson</p>
<p>这些改进意味着：WinUI不再只是“演示级”框架，而是真正可以承载<strong>金融仪表盘、HR管理工具、计费软件</strong>等企业级应用的平台。</p>
<p><strong>三、为AI智能体时代而生：WinUI + AI工作流</strong></p>
<p>微软同时强调了WinUI在AI时代的新定位——<strong>原生支持AI智能体工作流</strong>。</p>
<p>具体包括：</p>
<ul>
<li class="">开发人员可利用AI智能体帮助<strong>规划、构建和优化</strong>WinUI应用</li>
<li class="">支持将遗留应用（WinForms/WPF）<strong>智能迁移</strong>到WinUI</li>
<li class="">针对AI辅助编程提供更清晰的控制流与更快的迭代体验</li>
</ul>
<p>换言之，微软并不只是简单地在WinUI上“叠加”AI功能，而是让<strong>框架本身为AI驱动的开发流程</strong>而优化。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/build2026-winui-2-b8f2ba5027b4ae9378a9ca9289671c20.png" width="1238" height="650" class="img_ev3q"></p>
<p><strong>四、开放但不失重点：WinUI与其他框架共存</strong></p>
<p>微软并未“宣战”其他框架。Windows依然是开放平台，React、SwiftUI、Compose等优秀模式会被借鉴。但微软明确希望：<strong>当开发者想要构建最佳Windows原生体验时，首先想到WinUI</strong>。</p>
<p>为此，微软还提升了WinUI的透明度——<strong>几乎全部移到了公共代码仓库</strong>，并承诺实现WinForms/WPF与WinUI之间“万无一失”的互操作性，让企业可以渐进式迁移，而非一夜重写。</p>
<p><strong>五、微软内部“Windows回归”的信号</strong></p>
<p>多家外媒在Build 2026后评论：<strong>今年是近年来微软谈论Windows原生应用最多的一届大会</strong>。</p>
<p>具体证据包括：</p>
<ul>
<li class="">组建新团队专门负责Windows 11原生应用开发</li>
<li class="">开始将“开始菜单”中的推荐与所有应用列表从React Native重写为原生实现</li>
<li class="">计划用WinUI重写<strong>文件资源管理器</strong>，以实现全局一致的体验</li>
</ul>
<p>这些动作表明：Windows在微软内部的战略优先级正在回升，而WinUI正是这一战略的<strong>技术底座</strong>。</p>
<p><strong>六、携手开发者，共建下一代Windows应用</strong></p>
<p>作为长期关注Windows技术演进的观察者，我们相信<strong>一个好框架需要与真实开发场景持续磨合</strong>。WinUI正在快速补齐短板，而我们也已经在远程控制、企业办公工具等领域积累了落地经验（参考案例：<strong>小烨远控</strong>）。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/build2026-winui-3-7f9f3b0606f5c679b5434eaf9c1ad025.png" width="985" height="490" class="img_ev3q"></p>
<p>如果您或您的团队正在规划Windows应用开发，或者希望将现有应用现代化迁移至WinUI，<strong>欢迎联系我们</strong>。我们可以一起评估可行性、设计架构，并利用WinUI的原生性能与AI就绪能力，把产品做得更好。</p>
<p>在微软全力投入WinUI的今天，正是拥抱Windows原生生态的最佳时机。</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="WinUI" term="WinUI"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[WinUI 3 数据绑定：如何让 UI 自动更新？]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding"/>
        <updated>2026-05-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[1. 什么是 UI 自动更新]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-什么是-ui-自动更新">1. 什么是 UI 自动更新<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#1-%E4%BB%80%E4%B9%88%E6%98%AF-ui-%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0" class="hash-link" aria-label="1. 什么是 UI 自动更新的直接链接" title="1. 什么是 UI 自动更新的直接链接" translate="no">​</a></h2>
<p>想象一个最常见的场景：</p>
<p>你在一个输入框里打字，屏幕另一边的文字标签同步变化，不需要你点任何“保存”或“刷新”按钮。</p>
<p>这就是 UI 自动更新。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="没有数据绑定的做法">没有数据绑定的做法<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#%E6%B2%A1%E6%9C%89%E6%95%B0%E6%8D%AE%E7%BB%91%E5%AE%9A%E7%9A%84%E5%81%9A%E6%B3%95" class="hash-link" aria-label="没有数据绑定的做法的直接链接" title="没有数据绑定的做法的直接链接" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/cn-no-binding-7e26fbfc78da63df2ff7c03ed3fda972.png" width="505" height="65" class="img_ev3q"></p>
<p>数据变化的地方越多，这种“手动搬运”的代码就越多。改一个字段漏掉一个地方，界面就会显示不一致。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="有数据绑定的做法">有数据绑定的做法<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#%E6%9C%89%E6%95%B0%E6%8D%AE%E7%BB%91%E5%AE%9A%E7%9A%84%E5%81%9A%E6%B3%95" class="hash-link" aria-label="有数据绑定的做法的直接链接" title="有数据绑定的做法的直接链接" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAABBCAYAAAAqlOT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOxAAADsQBlSsOGwAAIjRJREFUeJztXQtwU+eVPlcv6+G3jYOxsSEbsCEhISYTCE4oTrdL2FezbaFtKKS7201xutnSbaEDncQ1NHhKNpN0J8U025nmRR/QaUk6KZA2cULrxEmKAyHBdmjABjl+y8a23q895z6kK+lKluQrSzb3YzSWrqSryz3nfOfxn///NaBAgQIFCuYcFHJXoECBgjkIhdwVKFCgYA4ibnJvampapNfrF6lUKkY45vV6GVAgG9566603li9f7hdeNzY2Cs/9kAFoaGjQ5+fnrxHrgABFF+SBw+E4+957743R8zBd8EGG4MCBA3dkZWXpxccU+csHl8s1YLfbO4TXyfJATHL/wQ9+UHrTzVU/LSgovtOvcqsc/gkvKEgZ1q5dmzdhG+s2X+n9effFy40PPPCAv7S0lATq4wU84yRPhF61bMlj8+fP+5w+K7tk3NtvBQUpQ7Zqnv6OO2+fHBwa/ONfOy99s7+/f8zpdPo2bdrEENmny+E/9dRT9yypXvxEXnZR9YSn/6oXFCpIFbSMSZXFGLUjlqG3u85//F/IAx3J8EBUcn/6p0//xw1LK5r6TG8U9akug5tRbHomYMq6blGeYdmOO8pu+8I7b773OYyILlksFi+SLFmTbyYjuMcff3zNLauW/2rUcK7kr9rX9A6VhQ7ngYKUIsufl5VtuP7za+at/tu/vHX2q8PDw2+gcXvD9GBGyB1/L//mW2/8mbHEv75X/3J+l+oTOqzoQIqhAT3k6Cs+dWvuXa/Pu67g6Q/e79yHEb0nTP7+2OeQwE9/9tOHFlTr93cansn2gAMUzByszABYDQPG7KyPlq5Z9w+vvnbiT+tMJtPQ5OSka2JiwoXCnZEUncpwK1ff9PuPjb8q4EldwQzByVwFp/Y9zbjmo6Jb1n7hhXdanNuQ4N9WqVRO1AP3TOrB2nWr3xzOabuhV/e+FhTMGIh3R1UfwVjOxwULqz7zzRWa5fMufXR5J8rfmZ2d7cZMzstnclF1IILcyaivX1K+90P9/2X7ldQrbZjECGnQ1FZ8c81NB99uffdrGo3GlpeXp8LozYWC9Rw9ejSlwll5242/vWx8WSH2NIKy5cum3+Wtrv38T/5wvGWj2+2mWvyM6cFzLzzTOGn8a8WIQuxpg5/xwmX9CX3Vwq2berv7X9bpdH+y2WwOJHbn+fPnSfY01iEZwUeQ+7Ibb/hxn+GNfDqpgvTCoj2nXlpasxoj9/XosVtRsCq9Xs8OtGHk5k9VHf7gwYNf8pgs10+oLoOC9IKc66Txo6KFlQv/89zZc81Go1E7E3qAQV7BosUL//us/qAJFKQdvdmv5txy24bHX3n51b/Dl+N0jAgeHTygg6foPUL+EeReVFRS94n6EijIDFizug3FxcV3DQ0NfUivtVqtIEgfGnZKaq8l84s2Tuo6ckFBRmBSd1lbVn77nX95x/lLhmFUdIz0AB2+D1P0lOhBfn7++gno8ypBXmaAMvkbTLllKpVqoc/nu4IPP8kfCZ7kz0jJP4TcqSTjBadXqbNnDmyaPnXpwltub29v/6Xf7/dhxOZBwXoQ7v7+/pQMquXn597Vo+4DBZkBK8picXHp9W63O4dekx5gNuc2GAxui8Xi4fUganqeBBhTjmmVTTegRO0ZBKt30I32XzM8PHyV5I9E74kl/xByx5RvsdLumFkgR2vSaXJcLpcJozUXErsDjdrhRKDXjllzSxbZxoLFNLCrIDNAOqDT6rWoAwYidozeXagLNnw4dDqdi9cDWZGdY6hyqMaUSY4ZBKdmXG00Giq8Xm82OnoH8rUjNzfXVVhYKCn/DBXeCByr68RUohbuXZPgV81mOLTVDnUtS6Aqzq9YjpyBJ7sXwt5dRVGvpb26EnY0l0MhpAUMClSHAjWo1Wo98rpOg8DjbnxkmDO2Q2t9OwzdHym7rgOt0LKoBrZvNkh+M7YckruOk4urZTgf6cAVmPf8SqgtT+Q7ndBfH/3/myjQsWtRD/RI8AbM3AxI9taCggJ1X18fEy01Txb4G8lNSmq7AI88a4AdB9FWkjkD2e+2Hpj/KOrPHQm8JwnUgQdRBxZVQ+POImCmPc0KZXo36sGzqAcLI6/tJ3ht5gQlwIAJNjwncb4o8Pm8WpS9HmWvRwrQIR+oR0dHJeUvA7lzSnw6gW8wUxJlEayrN8GTu88kaFBIID/vgU82VsdN7KQAHS1WqLm/SPK91nrOyWw51Qqn2spjOxvWsQzDigSvOR6QYaNQdfhXZ7fbtVlZWWqbzSa7USeHaOQnJno7DF8CmL8uTqJDknh492DMjzBQAluiOXHzCJzrRMP53tTETk7liebIeRxl0yJmXoebzdC1eUkC+hgdKHs1PZDgqXtFi2m5ZmxsTFVaWpq5s0OnkCMrw9fw/vD/A7LfXtTm3j2tIZxSVl8NK1qk32PQ3hvRgUfcBEEHdsdH7GxwcciKji30eNn2Gvj6Fw0Q8xTl5fD116SNns77Iwxavi+Dg0H5q0j+xAMkf4fDwUSTv2yR+6rwKFvw4GEkzt7AFvE3OQI40Sl93hNbW+FE2LGA0UVVnE54+Hjs6yWF2IKfe0H43G5OYcSE0XWgHc7V4W/R/6u8Elq2XoCumBlBEdTVD8Nh/FxxizwGTfBzkbsan5JxazAdV+v1ejWm5Bli1EVw7/N2dGz0/xYUPCyCZw2tBOoSyMRikzeXoQUhHWT0SuhP+LkLN6+EfZshOUzphKzwQp30+4k6D4qm6UG6QHpARI+gtkgGU3OQCWzAkHTkHo41S2Af3ue4gPfy5ydK4CsishfA8gZlYc1FMUiWImvUgTBy7t0WQwdEv0V6sDdZPYjx+xw64ZEwTgr//XiAciFyV+Nf1tEbjUa1SP4hJdoQck/n+hCr4irBcIRxTngZpjiU9h++lEj5pBb2rZN2QhElBPTMm+tRwerN0c9fboAqVJAt3XgdBwplKi9w0qL1XMhrk1AxJVOhUCGjgPdnO+u0MUJnDxigtrk28LblzWHolSA6crI7Fl0RRc6cY161sSSJizDBPfFkTRGOIQrCiTvMUXA6K0FeYYGNnOUm6pahh9vtZo0bU3MVGjZz/vz5tDp6spcXROT1xN09iZEXyWTPINz6aC1UvX0BGk4VwvfZaJwvrXTQuYKvh7ZF4wvUgXjKHGyJJw4dIJA88doCEX2Ys1i1P7RMFP5aMnLHczbsgYQQWHeCd/KkB8gFjEj+0csyGAVkxAJVyWEEOlC5apqmIOkwdJ0ahAUYnQe/IzgQE/Qeb4eHm4OfpfpYzcZhJHiI6UCqdlVDDUaRx9YlMWYQB9CoGRIqpWS5uenvWJQsa+wOps6rmqoB8H2xAw8lvCI2cg45hsp/+vhg1KiXQOSRUgjEHVFu48eEQkB6Y4bi5hgZG53nUYDNSY7dkEF7PB4GMzcGbZWliaysLGZ8fJwRLzKWDlTtwkBpl5CZF/M1d4pkkfSnuDIui+4B2F7Dk+IS+OblM/BimxHmPYvEDhiwNdnhyQfN7HlrD9YgwbfCMUiNfUUA9WDva0v4uvow3BSouXOR+kyDD/SmdJmylWVO726VrLs/UdcTcYypLga5YTlyhRv0TEjY5BBMaLQ2NNYumPc8muWjfCkmRrq8jhQ4FsG3WbgSz7NmWLdG3kFY2dJlGREsayDBHTDD0KVBON0ZLDuw5I/vll3GSGkNd1+Huq2wYFHs7CO8LBNC/vFG31MhRlmFHewiQp/yJMLgLeqfOcbHKPurOzNlcBAvKNMmJw8ZAzt0vE5OXrDvIrj3NSRg0fvRo+7aEKdYuLYY+re1Q/s9wXr6DiT8J++2s9lA7cGppZIQwqNzEQKDnnHe6dN7pLhQuiyTSmRAzV0GoKEfwciwpmllYgaDJNyOjmYHRmND7AEqJVTDUF0wYg8YuJDqs79lQtKJbpyUDTAbK2HDpZ6pB2HnCFi54j3bgA5y3qODqA81bNR1CGggzApl1Sb4pNsGdI/Z0k0ig6tSCJSBxLBKjtFIIWBYgbJK9C4fYAnbBMWS5R6JrpwYBF/Il+2erLNHH0+YrWgzw4kOCt6G4cjdGNQlNSDNOQA6D5U3tovKG2xNvAJ55dOtsGB7tHOjDmxLUAcIQnQeywHF1IMgUlWWSRQZ0woZLfKXQlmd+BUK49Ee+AS4wbrw2h+HsPIK360Dl63g7xzE7IJ/A4nhXH0lzMdzfYU1PDLcLvYtEtARPLJ97RQXh+TfwpeHatfZ0cHJH71nGoTS194Wjrhb2aOCo7RAcQsaKTn73RboQgKs4rsYVkQlyzMAdSbwg1RZJnSwPLTzaho1d7omTP83Szlisx0+iThognnlpBddke2WRBSi87CkJPomlTC24F3qaEMdmzOOH+X2rBXuqS+Bk2hrdc8VQ8v9XdB6B7qv/UI2HPx0aPmGOybYLpVpvrX+CjyxR5oTKHBa0cLZdOSg9DRr7qgHH6AebFot9Z3oepCJkIncp/MftMFQZ5IDqsAZF3XaCA5RqP0JiFlzD5QTxK18+Lw5+XSfbcWsFkiiHDZg9DrXo3e652wEypJmD8wPyBLT8hae9NYUQg0SM0toKMdPMGPaLNYZJH+q27NyJDmYL8DJsJZZefvgQ0FyA3bshdcxUWnOgkEAbFwYjLLRyPvxzzwQiJv0J77ghIiLrj9wz+YIOCeHsqmwoNwMyAeYWVFrIOlEFzryPZzjF0BllwWHMLN9m7MNthniuLhTpmiKDiYMntiadzs80h2lFTIJdP2iB/zra6CA4SL4c/j865u5NkhWD+5ZCEuFD6Me0FS/eWHnmDtlGVbRrXA6SjocX809XufAdWAEqm18OYY6K9qnaH1MDMGIkS3LxPs1UdReKFzv/SUYsV6AZXMtBRchPFvqFWVhwci6CJZtBDh8ygzzLoUOYrOGDRit1VtZ8mYj71i166hIoizDgsZeMPNr4ci89nuVcG6r0J/OzYNYUBdrfICcGNWWo0+cCpSt7pPfMWUChrr5/5s5dBVRNti5pxq2h0fSSP519/SgPowguXPObu8ukIB0mYR0poMaFkJq+oQkyzIseD14lSPz2j2V8ME2M3y0iRwON55Qut4I0b0Ip+P9lUGHwF7rYxhghh2bHWUZNlURyhgixFtzZ52DCZYlEfmT4rBRIlyQgdw5YjiJjqJGoiwzNfjyEEZm28VROqboWzaicI+UQ5VMMxUzDWSY31pE5GUKqSNzWVNRQP5V91XCAozsT9JAabMh5PtUtqBBcQFslLS4EIbwHE+EyDZYlonsg0+uLNN1gJtJei+EOipWZhVmONkZer3RQcFHDQAS/CP1glPjCb+zZO7V2EWo2rWSz95EBynYQZat2S/t0KrWIbnuvgKtXy4KlFEC5c+ArRhg2XoTnKTy5mq+hEP98Jcq4Zs7pc6afFmm6zHUg+018FmGI+QXfs8dJz1YWmmGV1CG9/049mSmqp01MIzOqKGbnxXba4bXqWnj2bDvIS80vgYpxbTJnQYPAaOzeZAcqP+ZUvRkvh9IbduS+22xITMBYsBU73hnwpE7TXjiSCBSkak1sqOuHY5V1M7R8gwX3frRQQpOjIyUnXOwKxmHJoqWu6NM9mFr+DJcOp9t9fLjMlQeZMt6bHBihmOYxS3A3w8hZTagMUGdpBPhsstickp81krn3Dsn5R4bbNReVQmbV0f5wJpy2LCsHc69ZUcy5uRbuLkKVjwYaitcCWcYOszl+Dl0ls8Nwq331ya3vEE0CHrgR8fczA2K7iPnQRE26sGLqAelSPxLxb/J68H6ED0wsJ08xegcHrmbO0IzXNfGubyAnJgeuUeUIeLEYgP/ecGIq9Iy4Bisz3M19yAiI3eqrW6nJxLlApbIjlNXTbTIDNP2JirPJL6cgtz4xu6DXzLoJl//n8Zd/fKdNVguo3vxcJ2Vj6pFesHX46mDYkt3OxyuN0RvBxQGXL9nYMk9pWC7biQEQhnXKX5SXJhjYbMKkFowMXS2NTdlvhNOCLOf07s+UQDf2XNgJf39n/27zqTuV0agg43axWvMcONrQfBRecsIWDYJn0Nd2lYCDXsuwLJX+fq7UL8HPoiitWLkdpai3wgB6sF9f0I9uIiZwqbQ6DuqHqBDOCwuUx5Ch3EozmUMZMS0yJ2NusPLEFKfC5vksqqJj27bEkl5p8Yw/s4LzVJ7vYZ2yxCEga3pQhgImjLlpg6Kpgvw8NZWGGpKbwT/wfiaS9u+e/hQib73h7KRPE/evSBE2jZ2kLGFnleY2V7yYAReAxuQBMPbAan3nSCsD7QdbY1ca29zpPwIkTXTZGvuEmANVOSgRP8/wqomrgwh1m2ubRYDBjFHbBaNEVFPfV1r8Bpk0sGEoYX+DybWXPzirt+cXKj5a2NqSJ7rcSeE3CNycKJIPjDln18UrFfUZ/7C3dEmsIUOToa2Hk6n5i4BKgGRHrxaDkUMRCwQtmr/StYBics47Fo36JjC15Gh+9Bwd+TaNeznZVnYLBTTIvfwFq8QiNvBoqzdQSWdmib5ugaKp7NGSDj4yS1sBFoepqD8wmSB5Q5a4ozGqKf6eQOSRCscknG1wERQrBs4dtG1vLnfXblj0LVwuxwkL5S3qPwQdPQGdpCR7huVT+5B0gtmLMHSBUXwW+qGA055VRNAx24i1SDpxV+WkXH5AdJf8dhQlAg/oXVpEllnJYUgWW/edeyNUU/JvfRAkj+2QHPph0/s/3aSBU4RwtpACXHdo2iRc8KQefmB8Np4lAXCqnbyZZwYmP7aNYkhrX3usrWDhRtiwhC17ImehxiihIIKA4EJIVoZYIbQ2Njo+Ox31vbb/Zp8H6PSy0Hy4e2nYsRS6OD9Kw+9tyJij6ojETIXy3AKSE6AuragZ+zdwnOB5DftfOn1cv0lFInlDZiVoGwhAR1I8YBmupExk5gUSMPrU8PZHlOuq2DtvT6VyuXWaO1OndZqA61NrVE7rzpV3n/97rMJrSsy4mVCwuBwkp904On0oCCD8F63H7yFd/6zT63y2lEPPFqtzabVWSdBY09GD8a9xmXhx656C9dftRauz1GNvFE05lcXV4CCWQyF3DMcaMugVjMzsiiUmnGP6RlHjz5TVhJWEIBeO3PrgmUxzu4cvXo+KJjVyAhyD0xFTrqTIJmdcmbyfNPDTeWTE2f+8OYxnU43qdfrLQYwDGTrsod9Ht9ErjHX2djY6EvkfP/47T/cL36tBWd/ma77h6VZlw9R2ebf7m17AmYtIndAmr5+pR/LylSgtvz5JRVG7QaDYdJoNI7oGf2gUWscSUYPtuw6+rMJH3xKfGyepu+ZRdruvRrNZE+OfvlRF8xO0ODmYX9qBilnEzKC3EMRe/MOATE3OohnF59YnQpmIyyrBzi89Qw3FT4DCF4uNDQ06N8ez5pP/VjhpA5zAbQYHA2Cz9EJY3LB5c9aRH9Vfp+jRHflUKn+8o9+2Li7G/jNOmAWo+rLlbBg2xV4UzQ5SgqsE/h9YtvczSZkILlzWDWddkGprgTJvVWn3iJQqrUuYqXIWYQ+Z9lXqfxSMddInQc7qS6ebRanubb6bMZ3G5oWnZ3IXz1f2/OkrO2w6YTEkr3CDkzcpiGF0PHp0F2SqIVy7047WJJa6iLzkVZyD12TxMrO6GOXyo3z+xGbRPBEnNj2ZXG2zwUQPuFpdsGgtnbelnNq8VwjdRbspDpyvFN1TKAMt3ILvF2LUIFWf1NO2/VzgtQFUPfUfuB2cAqUY4R1aWgy1Ah0SLZJGqBwFgZp8SDtrZAhu7cE1uLgpm1LL98rWlNEclVHUBADP3r0W6/DHEVgRc6YOsBtet6eIbNF04Gmxu/M/PZBM4E13A5ODQ/aYcfBIuj4Breq4/ZrcOkHQgaUZbglCIK7twQRujwA6qPsMzuF3uhE6vwJ9FMrmDnwS2FAdawPiRfxujaJfW4iuMEHByu7hyuLDmHd90qYP4s3EU0G6Sd3dh0R2tm1h5+OPp3QmzdeSDQqC1tKOOT6uGnn7GYgyiBdhoJbkZOWBog+EjgMR+o4Oc7l1RmvTXCLdYmXAqfZp3WvijfnxgDxkPTSBOySCAfL5V2ILAOQdnKn9Wmg2oRGWQwbFvfA4QOGQM09oqYuuQBTcFCU2drFru2xV6bSjPD7zDWcws8K8GsUfaUJ4PCz0h/xd1rZko0ix2sZwZq7sPHLXG6XTDO5j8CpZhOsqEfDawFYtqsahuot/H6m4jUppMsy3KJdNIBWDau2Jl5zj1bTD4e/sydi05G0LfqkIAJdp6xs91KV+ULEe4qDvkYg0S0jLDwmdMtca0grudPmDP31VbAOuuAke6QI7m02Qmv9YIDgYyG4ewuSfxK/H2tNlGibjSjIPEhuFBFHm6uCOYTABtcgXZahMZkkNwWarUgruQ91m6CONnM4IvWuhHGKtm9b1VQ7p/clVTANCCt6Yna1D7OriN2/eARW9VQc+BwAN6h60o/y5LevGz56Bg4Lm3Cb7dBXZUh6U6HZiDS3QnKe1iL5rrAvpQIFCSKRpXUDG8comM1gN/Hw8wOjvVwKV7xpJewAdOyPAWy4NAiltG/vHK2vSyHtA6ozBnZLrPjB7bKidMfMGXTa2VJfkMhpM2SABfWxNr5WMFsQbfltdslp2irvRAncd/DasueMJffTohKMFNgBzXWWwBoy7IBZWD0tfMC0LHwvzHCErUlDu+0oUd3sB7sHZ3NPYF9cAYyyBs3cgmhQlQns68zvubq/VtQWeW0gA8k9Rs95BIpipt8xB0ylkCE75SiQGWneIEXBDEE8qBoA1wMfjpi7yM0RZAS5z/T2UwrmKCS2eFOg4FpFRpC7gsyCz+/1MH61xs94QYECBbMTIeTucDi6DJCvAwUZAw3oweVw2ITXDJP6XZms9gmzUV+8yAoDoCD9IB1wuh3u8ONqtdqv0+n8aLey/+b4qPW9/LLCz4Ia/ynICBg8BT6L5UxfvJ8PIXebzdbv8/ltWf48g5O5CgrSD5O7wvNBV88Z8TGVSpVSgh8ZHj2Rk1ex3apWyD0TkOOrAHNvz0Vy7BqNhpW91+tNqQ6MjY29U+aqnAQd5IGCtAMzaTBpirUDAwM9ZP/xcEBEWWZkZLjVZKj4e6f2nFKyyQCYHAvdly+f6fKh10WB+vx+v0+I2OiRit8cHRl7paKs8stgelcx7AyAyVHh+vDjng+E17wOsLrgdDr9ubm5/vPnz8vaC2K3289m+XP9lDV4YO4t/T/bkO0vg4HhAYra2QyOHD3JPxYHRBD4uTMdD91VuGbNRO7FEjdjBQXpw3X21e6O9y+2obe+TMaMh7xardaLJO8lwabqd/v7+1+cX170doF2ed2o7rwWFKQN2b4FoBottbS9efwVcuo8sXvRuAN6YLFY/MuXL5fL0fsbGxvhoYceGjt/rrOx7JbP7O0x/S4HFKQNFLWXjtdZj7z4u6cxY2M5gOTu8XhI5lHlH0HufYgPPrywa9mKf/nfi9m/zVUIPj0ocK3wGkaXjP7x5DO/JmPmDdqDb7kxivdgZOXNyspKCcGjcfv37dv3tbvW173vU9vzr6ovgYKZBxH7grENE7848ptmoFWx8SHoAf71YNTm0Wg0XqvVKrseFBYW+nt6zD8rXXjbF69T3VEzYHhLGYtLAyhzWmD9jON027lXRkZGzETsJH/868YH8YCfZMV/3B/6XRHIqBsaGvxXPr7ya9eky33r7Vufshjfy7Vp+tSTTC8o3ROpRZY/D4z+66Bw8hZ7/6XJrud+98tnMDpz8OTuQmN24sOBabjL7XZ70Q/7n3766ZSUZq5cudLfekpVe9Otdz5XkHdz9aj+fZNNNQiKs08tyJgNvhIocFS7YfS6ESL24eHhPtIBJHIP6oMbH6we0HO9Xu8tLS2laFtuPaDI0NP25798eUn19fuX3nD/P40Y38l2qCxgZZSxmFSDxln0vkIonrzNeurVtt+cPfv+6+TIiQdI/vicdMCFHyVSlnTuEZH7+fPnKcT3Yqh/8vhLr3y6avnSndddd8PqpUWllWqVRhk5TyEmbGOTQ0MDva+8+c6JixcvnuMH0MiYHShIK3pqetgxJXMZjUZvd3d3qkoz/tHRUR+SxsW3Tr27obi4+CvXL1377xV5hX9jyDIp8/VTCOqKGbIM9Lef/vCN06dfPkXjLFSOEeuBwWCwog7Y8bgTv+Ihm03Bpfiys7O9Tqdzov3ds49cvJD/xxtXVG8vLSqsLMydVwIKUgrzQM+VkYFh80sth3+NmdmYIH+UuZ3kTzzg9XpdqAes/I8ePTplWUao3Xgw5Xei4+47c/rsPgz9C/B5rsvlMuHfLHxokHhU7Bf8/mtsUm9qQYQuPPhIzYWCtKE8JtCwJ/CvlSJ4/KiHl1VKInc6N2YGFBU6+/v7f/Xxxx+/goaejzqQJ9YDvD4a2WEUPZAXvPzZwVPSA4rUyLBJD1AfJk0mk42MGz/qS4EesHX3Bx54wJuXl+fKz8+3joyMtL32x1NdqAM5Cg+kHkLLs1j++LAhsY+jzbE8gG87r1696ok23hIRuVN6t2nTJv/8+fPdGB3aCwoK2Gjd7Xb7qNaDP6BHpdLhg46TYBWhygsaNPOj8NgUHO+3nSJ2fD2OshjH+27Hz7jQW3ulvLVc4PXAh78b0AM0cIZasJBkUB3cBtID3sBJBxQ9kBfsYBmVY6T0YHJy0oak606lHqBjpwweudxlx4ACL0VNohZq/gYtFX0V+acKLA8QsVMpBh8Okj++voqyGEeZ2Hw+n4tkxJfkph5QpQ+hsvgaGhqoluOkCRKYnvnRY9NgngNPaMDfJKPW4nMVRW6gQDYILY+UhuF9ppoqpd9WjKCsSKY2lIODiD+VUTsP0gMv6gHJ1zk2NsZQyx3+vttms1F6qOhBCiHWA+ROMm6qsU4KekB1V/yYh2wVUqgHhYWFxAMOlD/k5OT40alQtkBEo8g/hQiXPz6nrM1G8sf3KJOn/tSYg6DRetkpLSPDpolNfiQYH6aBbhSuY3R0NAuFqsUf06BgVUJapkAeUHsTGo6POmLIY2OURg7WicdImC4idpLNTF2PoAcYJdLvs8oWrgdI+Go8rhi3jBD0AJ+ScbsFPUBid6I9OkV6kCpiZ0szCC9l8hhM0HPiAZcgf8rcMKtTK/KXHyR/lLEX/3oFHkBOIKdKTp0ydzfv2AnxlWVEEAje19fXR0L1YORGSqVB5aK8nHI0FSqcQu4ygSIjvK9k1BQh+dBwqAzmxsyJsiYPn4LHFGgqQHrAG7gP5e0W6wHqgAavmcFrZiYmJhQDlwl8extNUmL7msV6QI9oqbjMoPMzpHMof7dY/vjQYuCnwWtSkfwVHpAXyAW+cB4YHx93Y/bmjZcHppqFKrRYsfVX9B400MoSOgqXwR9mUAkVg5YJeD9ZQaFBA95r1rjFD762OmOkzoP9Pb5EQ7MhydkH9IAgXLOiC/JB0AVK4aiPHe83zUL1UjluhohdgCB/nyB/fElzLFwocwYfrPwV2csLkj/ZFE1eJNnjIR9/7+PmgXiXGBDq8HRC8hwMKhmDXhsUyAfx/eRbUlkBzrAxRwVeR6C+S7V4QQ9AgewQdIFvcyPbY0TRWjruecCpUDZPB8xmsyL/FEEs/2R5IJH1Y8QTJRSBph5pJ/MoECsaQdGF1CN8klI6dUPhgZlHUvJOdnGwTCUeBTMPRReuXSiyz2AoKz8qUKBAwRyEQu4KFChQMAfx/3fhaQ+rRbmlAAAAAElFTkSuQmCC" width="375" height="65" class="img_ev3q"></p>
<p>中间两步完全由框架完成。你只需要做一件事：<strong>告诉 UI 和数据之间是什么关系</strong>。</p>
<!-- -->
<p>下图展示了一个可输入文本框和一个展示文字的文本标签，当在文本框输入文字时，文字自动传递给绑定变量，然后又反向绑定到文本标签，实现了实时自动更新。</p>
<blockquote>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/input-output-96db79b39a1c4a18995eca340500464d.webp" width="1800" height="1080" class="img_ev3q"></p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-让-ui-自动更新的两个核心">2. 让 UI 自动更新的两个核心<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#2-%E8%AE%A9-ui-%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0%E7%9A%84%E4%B8%A4%E4%B8%AA%E6%A0%B8%E5%BF%83" class="hash-link" aria-label="2. 让 UI 自动更新的两个核心的直接链接" title="2. 让 UI 自动更新的两个核心的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="21-数据绑定建立连接">2.1 数据绑定：建立连接<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#21-%E6%95%B0%E6%8D%AE%E7%BB%91%E5%AE%9A%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5" class="hash-link" aria-label="2.1 数据绑定：建立连接的直接链接" title="2.1 数据绑定：建立连接的直接链接" translate="no">​</a></h3>
<p>在 XAML 中声明“这个控件的这个属性，等于那个数据的那个属性”。</p>
<p>比如：</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">TextBlock</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Text</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">{x:Bind 用户姓名}</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></div></code></pre></div></div>
<p>这行代码的意思：这个 TextBlock 显示的内容，永远等于“用户姓名”这个数据。</p>
<p><strong>不需要写任何 C# 代码来赋值。</strong></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="22-inotifypropertychanged发送通知">2.2 INotifyPropertyChanged：发送通知<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#22-inotifypropertychanged%E5%8F%91%E9%80%81%E9%80%9A%E7%9F%A5" class="hash-link" aria-label="2.2 INotifyPropertyChanged：发送通知的直接链接" title="2.2 INotifyPropertyChanged：发送通知的直接链接" translate="no">​</a></h3>
<p>这是初学者最容易踩的坑。</p>
<p>普通 C# 属性变化时，WinUI <strong>不会自动感知</strong>。你必须让数据类主动说一声“我变了”。</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">public string 用户姓名 { get; set; }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">private string _用户姓名;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">public string 用户姓名</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">{</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    get =&gt; _用户姓名;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    set</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        _用户姓名 = value;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        通知UI我变了();</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div></code></pre></div></div>
<p>通知的方式有多种：</p>
<p><strong>方式一：原生 INotifyPropertyChanged</strong></p>
<p>继承 <code>INotifyPropertyChanged</code>，实现 <code>OnPropertyChanged</code> 接口，并在绑定变量变化时调用通知接口。</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">public event PropertyChangedEventHandler PropertyChanged;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">private void OnPropertyChanged([CallerMemberName] string propertyName = null)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">{</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div></code></pre></div></div>
<p><strong>方式二：借助 CommunityToolkit.Mvvm</strong></p>
<p>使用现成的 .NET 库来简化通知过程。</p>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-基本示例制作一个简单的应用启动器">3. 基本示例：制作一个简单的应用启动器<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#3-%E5%9F%BA%E6%9C%AC%E7%A4%BA%E4%BE%8B%E5%88%B6%E4%BD%9C%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%BA%94%E7%94%A8%E5%90%AF%E5%8A%A8%E5%99%A8" class="hash-link" aria-label="3. 基本示例：制作一个简单的应用启动器的直接链接" title="3. 基本示例：制作一个简单的应用启动器的直接链接" translate="no">​</a></h2>
<p>用一个实际项目来串起所有概念。界面很简单：</p>
<ul>
<li class="">GridView 网格展示应用列表（图标 + 名称）</li>
<li class="">点击某个应用后，启动该应用</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/appui-dcb58d21371fa9c519b3a9fec687c02e.png" width="663" height="275" class="img_ev3q"></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="31-项目结构">3.1 项目结构<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#31-%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84" class="hash-link" aria-label="3.1 项目结构的直接链接" title="3.1 项目结构的直接链接" translate="no">​</a></h3>
<blockquote>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/projectinfo-52770d1b594ce279023fffe05796e736.png" width="330" height="299" class="img_ev3q"></p>
<p>这里简化结构，主要包含两大部分：</p>
</blockquote>
<ul>
<li class=""><strong>ViewModel</strong>（视图模型）：包含了数据定义，并负责通知</li>
<li class=""><strong>MyAppsPage</strong>（界面）：XAML，负责显示</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="32-数据模型">3.2 数据模型<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#32-%E6%95%B0%E6%8D%AE%E6%A8%A1%E5%9E%8B" class="hash-link" aria-label="3.2 数据模型的直接链接" title="3.2 数据模型的直接链接" translate="no">​</a></h3>
<p>定义每个 App 应用长什么样，主要信息包含：图标、名称、描述。</p>
<blockquote>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="150" height="125" class="img_ev3q"></p>
</blockquote>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="33-视图模型">3.3 视图模型<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#33-%E8%A7%86%E5%9B%BE%E6%A8%A1%E5%9E%8B" class="hash-link" aria-label="3.3 视图模型的直接链接" title="3.3 视图模型的直接链接" translate="no">​</a></h3>
<p>这是整个数据绑定的中枢。</p>
<p>这里主要暴露一个应用列表，用 <code>ObservableCollection</code> 类型，这样增删应用时 UI 会自动刷新。</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">public class AppLauncherViewModel : ObservableObject</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">{</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    public static ObservableCollection&lt;AppInfo&gt; AppItems;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="34-界面-xaml">3.4 界面 XAML<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#34-%E7%95%8C%E9%9D%A2-xaml" class="hash-link" aria-label="3.4 界面 XAML的直接链接" title="3.4 界面 XAML的直接链接" translate="no">​</a></h3>
<p>核心绑定写法：</p>
<table><thead><tr><th>XAML 中的写法</th><th>含义</th></tr></thead><tbody><tr><td><code>ItemsSource="{x:Bind AppItems}"</code></td><td>GridView 的数据来源是 ViewModel 里的 Apps 列表</td></tr><tr><td><code>Text="{x:Bind Icon}"</code></td><td>DataTemplate 内部绑定到当前项的 Icon 图标</td></tr><tr><td><code>Text="{x:Bind Name}"</code></td><td>DataTemplate 内部绑定到当前项的 Name</td></tr></tbody></table>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="35-运行效果">3.5 运行效果<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#35-%E8%BF%90%E8%A1%8C%E6%95%88%E6%9E%9C" class="hash-link" aria-label="3.5 运行效果的直接链接" title="3.5 运行效果的直接链接" translate="no">​</a></h3>
<p>最终运行起来如下所示：</p>
<blockquote>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/apprunningwebp-ba0150bddcd0b11ba45a8bddb48ed3e7.webp" width="1912" height="1080" class="img_ev3q"></p>
</blockquote>
<ul>
<li class="">界面展示一行应用图标和名称</li>
<li class="">鼠标点击任意应用，启动对应 App</li>
</ul>
<p><strong>全程没有写任何“点击 → 找控件 → 赋值”的代码。</strong></p>
<hr>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-小结">4. 小结<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/19/winui3-binding#4-%E5%B0%8F%E7%BB%93" class="hash-link" aria-label="4. 小结的直接链接" title="4. 小结的直接链接" translate="no">​</a></h2>
<p>如果发现绑定未生效，最可能的原因主要如下：</p>
<table><thead><tr><th>现象</th><th>可能的原因</th></tr></thead><tbody><tr><td>数据变了，UI 不动</td><td>属性没实现 INotifyPropertyChanged</td></tr><tr><td>列表新增了数据，GridView 不显示</td><td>用了 List 而不是 ObservableCollection</td></tr></tbody></table>
<p>WinUI 3 的数据绑定，主要就是两件事：</p>
<ol>
<li class=""><strong>声明关系</strong>：XAML 里用绑定语法</li>
<li class=""><strong>发出通知</strong>：ViewModel 实现 INotifyPropertyChanged</li>
</ol>
<p>理解这套关系后，写 UI 就变成“描述数据长什么样”，而不是“搬运数据”。代码量减少，bug 也减少。</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="WinUI" term="WinUI"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[小烨远控 3.0.1 实战：不同账号设备如何一键组网？]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/05/13/one-click-networking</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/05/13/one-click-networking"/>
        <updated>2026-05-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[分类：Windows远程 发布日期：2026/5/12]]></summary>
        <content type="html"><![CDATA[<p>分类：Windows远程 发布日期：2026/5/12</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="背景">背景<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/13/one-click-networking#%E8%83%8C%E6%99%AF" class="hash-link" aria-label="背景的直接链接" title="背景的直接链接" translate="no">​</a></h3>
<p>在实际使用远程桌面软件或访问远程设备资源时，我们经常会遇到一个场景：</p>
<p><strong>两个人的不同设备，分别登录了不同的账号，想访问对方网络资源，怎么办？</strong></p>
<p>对专业人员来说，可以考虑搭建VPN/内网穿透等，但对普通用户搭建成本太高，出问题也很难排查维护。</p>
<p><strong>小烨远控 3.0.1 的网络组功能</strong>，可以让两个人的异地设备轻松组建到一个网络。</p>
<!-- -->
<hr>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="网络组是什么">网络组是什么？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/13/one-click-networking#%E7%BD%91%E7%BB%9C%E7%BB%84%E6%98%AF%E4%BB%80%E4%B9%88" class="hash-link" aria-label="网络组是什么？的直接链接" title="网络组是什么？的直接链接" translate="no">​</a></h3>
<p>简单说，可以把网络组理解为一个<strong>虚拟局域网</strong>。</p>
<p>把不同账号下的设备拉进同一个“房间”（网络组），它们就能像在同一个局域网一样互相访问，虚拟IP直连，不需要公网IP，不需要端口映射。</p>
<hr>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="实战两台设备跨账号组网">实战：两台设备跨账号组网<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/13/one-click-networking#%E5%AE%9E%E6%88%98%E4%B8%A4%E5%8F%B0%E8%AE%BE%E5%A4%87%E8%B7%A8%E8%B4%A6%E5%8F%B7%E7%BB%84%E7%BD%91" class="hash-link" aria-label="实战：两台设备跨账号组网的直接链接" title="实战：两台设备跨账号组网的直接链接" translate="no">​</a></h3>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="环境准备">环境准备<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/13/one-click-networking#%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87" class="hash-link" aria-label="环境准备的直接链接" title="环境准备的直接链接" translate="no">​</a></h4>
<table><thead><tr><th>角色</th><th>账号</th><th>设备</th></tr></thead><tbody><tr><td>创建者</td><td>账户A</td><td>Windows 台式机</td></tr><tr><td>加入者</td><td>账户B</td><td>Windows 笔记本</td></tr></tbody></table>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="步骤1创建网络组">步骤1：创建网络组<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/13/one-click-networking#%E6%AD%A5%E9%AA%A41%E5%88%9B%E5%BB%BA%E7%BD%91%E7%BB%9C%E7%BB%84" class="hash-link" aria-label="步骤1：创建网络组的直接链接" title="步骤1：创建网络组的直接链接" translate="no">​</a></h4>
<ol>
<li class="">打开小烨远控，登录<strong>账户A</strong></li>
<li class="">左侧菜单：<strong>网络组 → 创建网络组</strong></li>
<li class="">输入名称：<code>MyGroup</code>（只支持字母、数字、下划线）</li>
<li class="">点击<strong>创建</strong></li>
</ol>
<p>创建成功后，下方列表会显示你创建的网络组。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260511-153246-a752779f25817fc3d200f2fc0ef3d72b.png" width="973" height="561" class="img_ev3q"></p>
<p>💡 <strong>小技巧</strong>：点击“创建并加入”会把当前设备自动加进去，省一步操作。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="步骤2另一账号加入网络组">步骤2：另一账号加入网络组<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/13/one-click-networking#%E6%AD%A5%E9%AA%A42%E5%8F%A6%E4%B8%80%E8%B4%A6%E5%8F%B7%E5%8A%A0%E5%85%A5%E7%BD%91%E7%BB%9C%E7%BB%84" class="hash-link" aria-label="步骤2：另一账号加入网络组的直接链接" title="步骤2：另一账号加入网络组的直接链接" translate="no">​</a></h4>
<ol>
<li class="">在另一台设备上登录<strong>账户B</strong></li>
<li class="">进入 <strong>网络组 → 加入网络组</strong></li>
<li class="">输入前面创建的网络组名称：<code>MyGroup</code></li>
<li class="">点击<strong>加入</strong></li>
</ol>
<p>加入成功后，账户B的设备也会出现在网络组中。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260511-153549-d13dafe6ed741ee752282909f42d9b77.png" width="941" height="521" class="img_ev3q"></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="步骤3验证互通">步骤3：验证互通<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/13/one-click-networking#%E6%AD%A5%E9%AA%A43%E9%AA%8C%E8%AF%81%E4%BA%92%E9%80%9A" class="hash-link" aria-label="步骤3：验证互通的直接链接" title="步骤3：验证互通的直接链接" translate="no">​</a></h4>
<p>在网络组界面，每台设备都会显示一个<strong>虚拟IP</strong>。打开命令行，ping 对方的虚拟IP：</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="Windows远程" term="Windows远程"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[小烨远控 3.0.1 发布：跨账号轻松组建网络组，异地设备一网打尽]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/05/12/v301-published</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/05/12/v301-published"/>
        <updated>2026-05-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[我们很高兴地宣布，小烨远控 3.0.1 正式发布！本次更新带来了一项重磅功能——网络组（Network Group），让不同账号之间的设备互联变得前所未有的简单。]]></summary>
        <content type="html"><![CDATA[<p>我们很高兴地宣布，<strong>小烨远控</strong> <strong>3.0.1</strong> 正式发布！本次更新带来了一项重磅功能——<strong>网络组（Network Group）</strong>，让不同账号之间的设备互联变得前所未有的简单。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="-核心亮点跨账号网络组"><strong>🚀 核心亮点：跨账号网络组</strong><a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/12/v301-published#-%E6%A0%B8%E5%BF%83%E4%BA%AE%E7%82%B9%E8%B7%A8%E8%B4%A6%E5%8F%B7%E7%BD%91%E7%BB%9C%E7%BB%84" class="hash-link" aria-label="-核心亮点跨账号网络组的直接链接" title="-核心亮点跨账号网络组的直接链接" translate="no">​</a></h3>
<p>在过去，使用远程控制软件时，同账号下的设备可以轻松互连，但一旦涉及<strong>不同账号</strong>，往往需要复杂的配置、中转服务器甚至第三方工具。</p>
<p>现在，小烨远控 3.0.1 彻底解决了这一痛点。</p>
<p><strong>网络组</strong>是一个虚拟设备群组，允许您将<strong>多个不同账号下的设备</strong>加入同一个逻辑组中，实现跨账号直接互通，无需额外配置。</p>
<!-- -->
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="-如何使用网络组"><strong>📖 如何使用网络组</strong><a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/12/v301-published#-%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E7%BD%91%E7%BB%9C%E7%BB%84" class="hash-link" aria-label="-如何使用网络组的直接链接" title="-如何使用网络组的直接链接" translate="no">​</a></h3>
<p><strong>第一步：创建网络组</strong></p>
<p>使用账户 A 登录小烨远控，进入 <strong>网络组 → 创建网络组</strong>，输入一个名称（如 MyGroup），点击创建即可。</p>
<p>💡 提示：名称仅支持字母、数字和下划线。</p>
<p>创建成功后，您可以选择 <strong>“创建并加入”</strong>，将当前设备自动加入网络组；也可以稍后通过网络组右侧的 <strong>“加入”</strong> 按钮手动加入。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260511-153246-a752779f25817fc3d200f2fc0ef3d72b.png" width="973" height="561" class="img_ev3q"></p>
<p><strong>第二步：邀请其他账号加入</strong></p>
<p>使用账户 B 登录小烨远控，进入 <strong>网络组 → 加入网络组</strong>，输入账户 A 创建的网络组名称（如 MyGroup），点击加入即可。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260511-153549-d13dafe6ed741ee752282909f42d9b77.png" width="941" height="521" class="img_ev3q"></p>
<p><strong>第三步：测试网络互通</strong></p>
<p>加入成功后，两台设备会分别获得一个<strong>虚拟 IP 地址</strong>。您可以使用 ping 命令测试互通性：</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="动态" term="动态"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Windows远程桌面：为什么建议一定要开启NLA？]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/05/06/force-nla</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/05/06/force-nla"/>
        <updated>2026-05-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[分类：Windows远程 发布日期：2026/5/6]]></summary>
        <content type="html"><![CDATA[<p>分类：Windows远程 发布日期：2026/5/6</p>
<p>在日常的Windows服务器或工作站管理中，远程桌面（RDP）是我们最常用的工具之一。但很多人可能忽略了一个关键的安全设置——<strong>网络级身份验证（NLA）</strong>。今天我们就来详细聊聊它的原理、效果对比以及开启建议。</p>
<!-- -->
<ol>
<li class=""><strong>什么是NLA？基本原理与版本支持</strong></li>
</ol>
<p><strong>网络级身份验证（Network Level Authentication，简称NLA）</strong> 是一种在建立完整的远程桌面连接<strong>之前</strong>，先进行用户身份验证的技术。</p>
<p><strong>基本原理</strong></p>
<p>在没有NLA的传统模式下，当你发起RDP连接时，目标计算机会先为你分配桌面会话资源、加载图形界面、启动登录屏幕，然后你才输入用户名和密码。这类似于你先走进了房间，才被要求出示证件。</p>
<p>而启用NLA后，在连接初期，客户端就必须先将你的身份凭证发送给服务器进行验证。<strong>验证通过后</strong>，服务器才会开始分配会话资源和加载桌面环境。这相当于在房间门口就设置了门禁，证件不合格连门都进不了。</p>
<p><strong>支持版本</strong></p>
<ul>
<li class=""><strong>服务器端</strong>：从 <strong>Windows Server 2008</strong> 和 <strong>Windows Vista</strong> 开始正式支持NLA。</li>
<li class=""><strong>客户端侧</strong>：从 <strong>Windows XP SP3</strong> 开始支持，但成熟集成在 <strong>Windows 7</strong> 及更高版本中。</li>
</ul>
<p>目前主流的Windows 10/11、Windows Server 2016/2019/2022/2025 都完整支持NLA。</p>
<ol start="2">
<li class=""><strong>开启NLA vs 不开启NLA：效果对比</strong></li>
</ol>
<p>为了直观理解差异，我将从连接效率、视觉表现和安全风险三个维度进行对比。</p>
<table><thead><tr><th>行为表现</th><th><strong>开启 NLA</strong></th><th><strong>不开启 NLA</strong></th></tr></thead><tbody><tr><td><strong>连接时的第一画面</strong></td><td>直接弹出标准的Windows登录窗口（输入用户名/密码）。</td><td>先显示远程桌面的“墙纸/欢迎界面”，甚至会先看到锁屏画面，然后才弹出登录框。</td></tr><tr><td><strong>身份验证时机</strong></td><td>在传输层建立后立刻验证。</td><td>已消耗了部分系统资源（如分配会话内存）后才验证。</td></tr><tr><td><strong>对服务器资源消耗</strong></td><td>低。验证失败不会创建任何会话。</td><td>高。每次尝试（包括密码错误的攻击）都会创建完整的登录会话，浪费内存和CPU。</td></tr><tr><td><strong>应对暴力破解</strong></td><td>强。攻击在早期就被拒绝。</td><td>弱。服务器忙于创建大量会话，极易耗尽资源导致拒绝服务。</td></tr><tr><td><strong>客户端兼容性要求</strong></td><td>需要RDP客户端支持NLA（Win XP SP3以上均可）。</td><td>任何旧版RDP客户端（如Win 2000、某些嵌入式设备）都可以连接。</td></tr></tbody></table>
<p><strong>2.1未开启NLA时的连接效果</strong>：先出现锁屏登录界面，然后才是提示输入用户密码。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/QQ20260506-214557-16e7f7e31b7ea7ea962d91262c874197.png" width="994" height="564" class="img_ev3q"></p>
<p><strong>2.2 开启NLA时的连接效果</strong>：直接出现Windows登录提示窗，输入密码之前不会消耗服务端资源。</p>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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In7YGjtg+NPDoNSBgGtdMayKukT8vxX/xDU2Cp+uleFDwAIAkAABCwBAAgQsAAAJELAAACRAwAIAkAABCwBAAgQsAAAJELAAACRAwAIAkEDPA/ahhx5yAKrjbwboDz0PWAAABhEBCwBAAgQsAAAJELAAACRAwAIAkAABCwBAAgQsAAAJELAAACRAwAIAkAABCwBAAgQsAAAJELAAACRAwAIAkAABCwBAAgQsAAAJELAAACRAwAIAkAABCwBAAgQsAAAJELAAACRAwAIAkAABCwBAAgQsAAAJlAbsrKdfcgAAoDWFAfvn/z3TAQCA1tFEDABAAgQsAAAJELAAACRAwAIAkAABCwBAAiP/9pH/09aCtVot+16v15sed0LryFvfzbvnAnnb8afbOorWH1uu1X2tIrYvtmzZOmL7eqt2X3TZVl6H1mvrnl6/EV2P3m9/nXnb8/dR0/RV9m/VqaL98qdr3/z99F+3/3vm/3vo68bt/b/v9quwdYTL5O1P9trv/vvk7Vu4rZttnOPGfteLtpX3fDtu3XereIabr+po+U73c+Tmnffz5sjN0nnb2VbZMql+59vdXt5x1NxXu+Vu1KffnnqzaX6bT8cHHXOafuem/6e7/5V196bX/y/3yul195vrf3L/qL06m2/atGlNv5Ph32DV/a6ibB03p3t/r+GsNf33r9Jt1N204n0I1hH+/v0370hb/VoLDjYAAAAASUVORK5CYII=" width="472" height="321" class="img_ev3q"></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="服务端强制开启nla">服务端强制开启NLA<a href="https://xiaoyeapp.com/zh-cn/blog/2026/05/06/force-nla#%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%BC%BA%E5%88%B6%E5%BC%80%E5%90%AFnla" class="hash-link" aria-label="服务端强制开启NLA的直接链接" title="服务端强制开启NLA的直接链接" translate="no">​</a></h3>
<p>系统属性 -&gt; 远程 -&gt; 远程桌面 区域，勾选“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”即为开启NLA，此时就强制开启了NLA。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/cn-QQ20260506-214315-59cde6f5f8a52a9346d139aec9c57dd4.png" width="480" height="599" class="img_ev3q"></p>
<p>服务端强制开启“只允许NLA连接”后，对于那些不支持NLA的客户端，连接时将直接报错，避免了会话资源的消耗；</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/cn-QQ20260506-214224-967a4a3e0b12fd77a5b109def7e988da.png" width="562" height="142" class="img_ev3q"></p>
<ol start="3">
<li class=""><strong>总结：为了安全，强烈建议开启NLA</strong></li>
</ol>
<p>通过上述对比可以清晰看到，<strong>关闭NLA</strong>虽然能兼容极老的系统（如Windows 2000、非标准RDP客户端），但它带来的代价是<strong>严重的资源浪费和巨大的安全风险</strong>。</p>
<p>尤其是在公网或暴露在互联网上的远程桌面服务（强烈不建议直接暴露3389端口，但如果有例外情况），关闭NLA相当于给攻击者留了一条无需验证就能消耗你服务器资源的“后门”。</p>
<p><strong>最终建议</strong></p>
<ul>
<li class="">✅ <strong>默认策略</strong>：在所有支持NLA的操作系统上，<strong>务必勾选“仅允许运行使用网络级身份验证的远程桌面的计算机连接”</strong>。</li>
<li class="">✅ <strong>兼容问题处理</strong>：如果遇到旧版客户端无法连接，可以考虑升级客户端系统，或者在<strong>内网隔离环境</strong>且<strong>部署了防火墙白名单</strong>的前提下，个案化关闭NLA，而不是全局关闭。</li>
<li class="">✅ <strong>进一步加固</strong>：即使开启了NLA，也建议配合<strong>强密码</strong>、<strong>账户锁定策略</strong>或<strong>非标准端口</strong>（次要手段）使用。</li>
</ul>
<p><strong>总而言之：开启NLA，用最小的配置成本，获得连接前置身份验证和安全防护的双重收益。这是所有Windows管理员应该遵循的安全最佳实践。</strong></p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="Windows远程" term="Windows远程"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[告别传统WinForm：用WinUI 3打造毛玻璃效果的现代桌面应用]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout"/>
        <updated>2026-04-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[引言]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="引言">引言<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#%E5%BC%95%E8%A8%80" class="hash-link" aria-label="引言的直接链接" title="引言的直接链接" translate="no">​</a></h2>
<p>还记得那些年我们用过的WinForm应用吗？灰色的边框、方正的按钮、一成不变的外观。在这个看脸的时代，用户对桌面应用的视觉要求越来越高。而WinUI 3的出现，让.NET开发者终于可以轻松打造出具有现代感的桌面应用。</p>
<p>本文将带你从零开始，用WinUI 3打造一个具有毛玻璃效果、自定义标题栏的现代化应用。最终效果将媲美Windows 11原生应用。</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="一为什么选择winui-3">一、为什么选择WinUI 3？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#%E4%B8%80%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9winui-3" class="hash-link" aria-label="一、为什么选择WinUI 3？的直接链接" title="一、为什么选择WinUI 3？的直接链接" translate="no">​</a></h2>
<table><thead><tr><th>特性</th><th>WinForm</th><th>WPF</th><th>WinUI 3</th></tr></thead><tbody><tr><td>Fluent Design</td><td>❌</td><td>需第三方</td><td>✅ 原生</td></tr><tr><td>云母/亚克力材质</td><td>❌</td><td>❌</td><td>✅ 原生</td></tr><tr><td>圆角控件</td><td>需自定义</td><td>需自定义</td><td>✅ 原生</td></tr><tr><td>现代导航</td><td>❌</td><td>需第三方</td><td>NavigationView</td></tr><tr><td>性能</td><td>一般</td><td>一般</td><td>优秀</td></tr></tbody></table>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="二环境准备">二、环境准备<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#%E4%BA%8C%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87" class="hash-link" aria-label="二、环境准备的直接链接" title="二、环境准备的直接链接" translate="no">​</a></h2>
<p>在开始之前，请确保你已经安装了：</p>
<ul>
<li class="">Visual Studio 2022（17.0+）</li>
<li class="">.NET 6 SDK 或更高版本</li>
<li class="">WinUI 3 项目模板（可通过VS Installer安装）</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="三创建项目并启用云母背景">三、创建项目并启用云母背景<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#%E4%B8%89%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE%E5%B9%B6%E5%90%AF%E7%94%A8%E4%BA%91%E6%AF%8D%E8%83%8C%E6%99%AF" class="hash-link" aria-label="三、创建项目并启用云母背景的直接链接" title="三、创建项目并启用云母背景的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="31-创建新项目">3.1 创建新项目<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#31-%E5%88%9B%E5%BB%BA%E6%96%B0%E9%A1%B9%E7%9B%AE" class="hash-link" aria-label="3.1 创建新项目的直接链接" title="3.1 创建新项目的直接链接" translate="no">​</a></h3>
<p>选择“空白应用，打包的 (WinUI 3 Blank App)”模板。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/layout1-a431b9f4e588a878443e436904080988.png" width="563" height="289" class="img_ev3q"></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="32-启用云母材质">3.2 启用云母材质<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#32-%E5%90%AF%E7%94%A8%E4%BA%91%E6%AF%8D%E6%9D%90%E8%B4%A8" class="hash-link" aria-label="3.2 启用云母材质的直接链接" title="3.2 启用云母材质的直接链接" translate="no">​</a></h3>
<p>云母（Mica）是Windows 11引入的半透明材质，能根据桌面壁纸动态取色，营造通透感，在Window对象的xaml文件开启即可；</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">Window.SystemBackdrop</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">MicaBackdrop</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">Window.SystemBackdrop</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/layout2-51607854a17dc7716a931192ea63d682.png" width="386" height="293" class="img_ev3q"></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="四自定义标题栏">四、自定义标题栏<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#%E5%9B%9B%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A0%87%E9%A2%98%E6%A0%8F" class="hash-link" aria-label="四、自定义标题栏的直接链接" title="四、自定义标题栏的直接链接" translate="no">​</a></h2>
<p>专业应用通常会隐藏默认标题栏，让内容区延伸到顶部。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="41-修改mainwindowxaml中自定义个标题栏">4.1 修改MainWindow.xaml中自定义个标题栏<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#41-%E4%BF%AE%E6%94%B9mainwindowxaml%E4%B8%AD%E8%87%AA%E5%AE%9A%E4%B9%89%E4%B8%AA%E6%A0%87%E9%A2%98%E6%A0%8F" class="hash-link" aria-label="4.1 修改MainWindow.xaml中自定义个标题栏的直接链接" title="4.1 修改MainWindow.xaml中自定义个标题栏的直接链接" translate="no">​</a></h3>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">Grid</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name namespace" style="color:#00a4db;opacity:0.7">x:</span><span class="token tag attr-name" style="color:#00a4db">Name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">AppTitleBar</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">Height</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">32</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">VerticalAlignment</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Top</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">Background</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Orange</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">TextBlock</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name namespace" style="color:#00a4db;opacity:0.7">x:</span><span class="token tag attr-name" style="color:#00a4db">Name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">TitleTextBlock</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">               </span><span class="token tag attr-name" style="color:#00a4db">Text</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">My WinUI3</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">               </span><span class="token tag attr-name" style="color:#00a4db">Margin</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">12,0,0,0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">               </span><span class="token tag attr-name" style="color:#00a4db">VerticalAlignment</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Center</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">               </span><span class="token tag attr-name" style="color:#00a4db">Style</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">{StaticResource CaptionTextBlockStyle}</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">Grid</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="42-设置标题栏拖拽区域">4.2 设置标题栏拖拽区域<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#42-%E8%AE%BE%E7%BD%AE%E6%A0%87%E9%A2%98%E6%A0%8F%E6%8B%96%E6%8B%BD%E5%8C%BA%E5%9F%9F" class="hash-link" aria-label="4.2 设置标题栏拖拽区域的直接链接" title="4.2 设置标题栏拖拽区域的直接链接" translate="no">​</a></h3>
<p>在 MainWindow.xaml.cs 初始化时设置扩展区域到标题栏；</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">public MainWindow()</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">{</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    InitializeComponent();</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    this.ExtendsContentIntoTitleBar = true;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    SetTitleBar(AppTitleBar);</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div></code></pre></div></div>
<p>这样就得到了一个自定义标题栏；</p>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="386" height="293" class="img_ev3q"></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="五核心布局控件实战">五、核心布局控件实战<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#%E4%BA%94%E6%A0%B8%E5%BF%83%E5%B8%83%E5%B1%80%E6%8E%A7%E4%BB%B6%E5%AE%9E%E6%88%98" class="hash-link" aria-label="五、核心布局控件实战的直接链接" title="五、核心布局控件实战的直接链接" translate="no">​</a></h2>
<p>WinUI 3提供了强大的布局控件，掌握它们是构建现代UI的基础。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="51-grid网格布局">5.1 Grid——网格布局<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#51-grid%E7%BD%91%E6%A0%BC%E5%B8%83%E5%B1%80" class="hash-link" aria-label="5.1 Grid——网格布局的直接链接" title="5.1 Grid——网格布局的直接链接" translate="no">​</a></h3>
<p>Grid是最常用的布局控件，适合构建复杂界面，如下定义了上下两行布局，第一行做自定义标题栏，第二行做导航栏；</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">Grid</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">Grid.RowDefinitions</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!--标题栏内容--&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">RowDefinition</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Height</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Auto</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!--导航栏--&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">RowDefinition</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Height</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">*</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">Grid.RowDefinitions</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">Grid</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name namespace" style="color:#00a4db;opacity:0.7">x:</span><span class="token tag attr-name" style="color:#00a4db">Name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">AppTitleBar</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Grid.Row</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">NavigationView</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name namespace" style="color:#00a4db;opacity:0.7">x:</span><span class="token tag attr-name" style="color:#00a4db">Name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">AppNavPanel</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Grid.Row</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">Grid</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/layout4-16c54568e08ae3191b34a138150ae8f4.png" width="386" height="293" class="img_ev3q"></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="52-stackpanel简单堆叠">5.2 StackPanel——简单堆叠<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#52-stackpanel%E7%AE%80%E5%8D%95%E5%A0%86%E5%8F%A0" class="hash-link" aria-label="5.2 StackPanel——简单堆叠的直接链接" title="5.2 StackPanel——简单堆叠的直接链接" translate="no">​</a></h3>
<p>StackPanel用于简单的内容堆叠，可以水平或垂直排列，如下定义了一排水平排列按钮；</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">StackPanel</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Grid.Row</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Orientation</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Horizontal</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Spacing</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">8</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">HorizontalAlignment</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Center</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Content</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">New</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Content</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Edit</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">Content</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Delete</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">StackPanel</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="386" height="293" class="img_ev3q"></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="53-综合-卡片式列表">5.3 综合-卡片式列表<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#53-%E7%BB%BC%E5%90%88-%E5%8D%A1%E7%89%87%E5%BC%8F%E5%88%97%E8%A1%A8" class="hash-link" aria-label="5.3 综合-卡片式列表的直接链接" title="5.3 综合-卡片式列表的直接链接" translate="no">​</a></h3>
<p>结合Grid和StackPanel，我们可以创建类似Windows 11设置的卡片式界面，如果你想进一步添加滚动条，外层包裹ScrollViewer即可，当ScrollViewer的内容区域超出窗口范围时，会自动添加滚动条，如下所示：</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/layout6-015090ef7a1cd9edcde47be8821688a0.png" width="386" height="293" class="img_ev3q"></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="六总结">六、总结<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/24/winui3-layout#%E5%85%AD%E6%80%BB%E7%BB%93" class="hash-link" aria-label="六、总结的直接链接" title="六、总结的直接链接" translate="no">​</a></h2>
<p>WinUI 3为.NET桌面开发者带来了前所未有的现代UI体验。通过本文的学习，你应该已经掌握了：</p>
<p>✅ 启用云母/亚克力毛玻璃效果</p>
<p>✅ 自定义标题栏，打造专业外观</p>
<p>✅ 使用Grid和StackPanel构建灵活布局</p>
<p>✅ 创建卡片式界面</p>
<p>✅ 响应式窗口适配</p>
<p>相比传统WinForm，WinUI 3既有简单容易上手的一面，也有高级复杂的功能，高级功能虽然复杂，但带来的视觉和用户体验提升是巨大的。如果你想在2026年打造一款让人眼前一亮的桌面应用，WinUI 3是一个不错的选择。</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="WinUI" term="WinUI"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[在Windows远程桌面中重定向你的磁盘]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/04/12/driver-redirection</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/04/12/driver-redirection"/>
        <updated>2026-04-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[分类：Windows远程 发布日期：2026/4/12]]></summary>
        <content type="html"><![CDATA[<p>分类：Windows远程 发布日期：2026/4/12</p>
<p>在日常工作中，我们经常需要将本地电脑上的文件拷贝到远程服务器或办公电脑上。传统的做法是通过网络共享、FTP或者云盘中转，但这些方式要么配置复杂，要么速度受限。</p>
<p>今天分享一个 Windows 远程桌面自带却容易被忽视的实用功能——<strong>磁盘重定向</strong>。配置完成后，你的本地硬盘分区会直接出现在远程桌面的“此电脑”里，拷贝文件就像操作本地电脑一样简单。</p>
<!-- -->
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="操作步骤">操作步骤<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/12/driver-redirection#%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4" class="hash-link" aria-label="操作步骤的直接链接" title="操作步骤的直接链接" translate="no">​</a></h3>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第一步打开远程桌面连接">第一步：打开远程桌面连接<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/12/driver-redirection#%E7%AC%AC%E4%B8%80%E6%AD%A5%E6%89%93%E5%BC%80%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E8%BF%9E%E6%8E%A5" class="hash-link" aria-label="第一步：打开远程桌面连接的直接链接" title="第一步：打开远程桌面连接的直接链接" translate="no">​</a></h4>
<p>按 Win + R，输入 mstsc，回车打开远程桌面客户端。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第二步进入本地资源配置">第二步：进入本地资源配置<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/12/driver-redirection#%E7%AC%AC%E4%BA%8C%E6%AD%A5%E8%BF%9B%E5%85%A5%E6%9C%AC%E5%9C%B0%E8%B5%84%E6%BA%90%E9%85%8D%E7%BD%AE" class="hash-link" aria-label="第二步：进入本地资源配置的直接链接" title="第二步：进入本地资源配置的直接链接" translate="no">​</a></h4>
<p>在远程桌面连接窗口中，点击左下角的 <strong>“显示选项”</strong>，切换到 <strong>“本地资源”</strong> 选项卡。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第三步配置磁盘映射">第三步：配置磁盘映射<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/12/driver-redirection#%E7%AC%AC%E4%B8%89%E6%AD%A5%E9%85%8D%E7%BD%AE%E7%A3%81%E7%9B%98%E6%98%A0%E5%B0%84" class="hash-link" aria-label="第三步：配置磁盘映射的直接链接" title="第三步：配置磁盘映射的直接链接" translate="no">​</a></h4>
<p>在“本地资源”选项卡中，点击 <strong>“详细信息”</strong> 按钮。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260412-200617-57785241f7491dbfd83c097ec476bd05.png" width="479" height="637" class="img_ev3q"></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第四步勾选要映射的驱动器">第四步：勾选要映射的驱动器<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/12/driver-redirection#%E7%AC%AC%E5%9B%9B%E6%AD%A5%E5%8B%BE%E9%80%89%E8%A6%81%E6%98%A0%E5%B0%84%E7%9A%84%E9%A9%B1%E5%8A%A8%E5%99%A8" class="hash-link" aria-label="第四步：勾选要映射的驱动器的直接链接" title="第四步：勾选要映射的驱动器的直接链接" translate="no">​</a></h4>
<p>在弹出的窗口中，展开 <strong>“驱动器”</strong> 列表，勾选你希望映射到远程桌面中的本地磁盘分区。</p>
<ul>
<li class="">勾选 <strong>“驱动器”</strong> 复选框可以选中所有分区</li>
<li class="">也可以按需单独勾选 C 盘、D 盘等</li>
</ul>
<p>确认后点击 <strong>“确定”</strong>。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260412-200710-5b4ac0e75ecebdfde07b203a1b71cf42.png" width="479" height="488" class="img_ev3q"></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第五步连接远程桌面">第五步：连接远程桌面<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/12/driver-redirection#%E7%AC%AC%E4%BA%94%E6%AD%A5%E8%BF%9E%E6%8E%A5%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2" class="hash-link" aria-label="第五步：连接远程桌面的直接链接" title="第五步：连接远程桌面的直接链接" translate="no">​</a></h4>
<p>正常输入远程电脑的 IP 和凭据，连接到远程桌面。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="最终效果">最终效果<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/12/driver-redirection#%E6%9C%80%E7%BB%88%E6%95%88%E6%9E%9C" class="hash-link" aria-label="最终效果的直接链接" title="最终效果的直接链接" translate="no">​</a></h3>
<p>连接成功后，打开远程桌面窗口中的 <strong>“此电脑”</strong>，你会看到“重定向的驱动器和文件夹”栏目下，出现了你刚才勾选的本地盘符。</p>
<p>现在，你可以像操作本地文件一样，直接在远程电脑和本地磁盘之间拖拽、复制、粘贴文件，无需任何中转工具。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260412-200324-6dd7f3c8248c000ac053acb5bff1b852.png" width="605" height="426" class="img_ev3q"></p>
<p><strong>注意事项</strong></p>
<ol>
<li class=""><strong>网络和权限限制</strong>：某些企业环境下，IT 管理员可能通过组策略禁用了磁盘重定向功能，此时该选项可能不可用或无效。</li>
<li class=""><strong>安全建议</strong>：仅在自己信任的远程电脑上使用此功能。在公用或不受信任的远程电脑上勾选此选项，可能导致本地数据泄露。</li>
<li class=""><strong>性能提示</strong>：映射的磁盘在远程桌面中读写文件时，实际数据是通过网络传输的，大文件拷贝速度受限于网络带宽。</li>
</ol>
<p><strong>结语</strong></p>
<p>这个小技巧帮你省去了搭建文件共享、上传云盘等中间环节，尤其是在临时需要传几个文件到服务器时，效率提升非常明显。</p>
<p>如果你也经常使用远程桌面工作，不妨试试这个功能。</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="Windows远程" term="Windows远程"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[WinUI 3异常处理：构造健壮的桌面应用]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception"/>
        <updated>2026-04-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[引言]]></summary>
        <content type="html"><![CDATA[<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="引言">引言<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E5%BC%95%E8%A8%80" class="hash-link" aria-label="引言的直接链接" title="引言的直接链接" translate="no">​</a></h3>
<p>任何应用程序都难免会遇到异常——网络断开、文件缺失、空引用、内存不足……关键在于<strong>如何优雅地处理这些异常，而不是让应用直接崩溃</strong>。</p>
<p>WinUI 3 作为新一代 Windows 桌面应用框架，提供了多层级的异常处理机制。本文将详细介绍 WinUI 3 中常见的异常处理方式，帮助您构建更健壮的应用。</p>
<!-- -->
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="一异常处理的层次结构">一、异常处理的层次结构<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E4%B8%80%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86%E7%9A%84%E5%B1%82%E6%AC%A1%E7%BB%93%E6%9E%84" class="hash-link" aria-label="一、异常处理的层次结构的直接链接" title="一、异常处理的层次结构的直接链接" translate="no">​</a></h3>
<p>WinUI 3 应用中的异常可以在不同层级被捕获：</p>
<table><thead><tr><th>App 层异常 (UnhandledException)</th><th>← 最外层，兜底</th></tr></thead><tbody><tr><td>Page/Window 层异常 (try-catch)</td><td>← 界面层</td></tr><tr><td>ViewModel/Service 层异常</td><td>← 业务逻辑层</td></tr><tr><td>async/Task 异常 (TaskScheduler.UnobservedTaskException)</td><td>← 异步任务</td></tr></tbody></table>
<p>限于篇幅，本文介绍最基本常用的异常处理。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="二applicationcurrentunhandledexception">二、Application.Current.UnhandledException<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E4%BA%8Capplicationcurrentunhandledexception" class="hash-link" aria-label="二、Application.Current.UnhandledException的直接链接" title="二、Application.Current.UnhandledException的直接链接" translate="no">​</a></h3>
<p>这是 WinUI 3 应用中<strong>最关键的全局异常处理入口</strong>。任何未被捕获的异常最终都会到达这里。</p>
<p><strong>基本用法</strong></p>
<p>在 App.xaml.cs 中：</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">public partial class App : Application {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    public App()   {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        this.InitializeComponent();</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        // 订阅全局未处理异常事件</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        this.UnhandledException += OnAppUnhandledException;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    private void OnAppUnhandledException(object sender,  Microsoft.UI.Xaml.UnhandledExceptionEventArgs e)  {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        // 标记异常已处理，阻止应用崩溃</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        e.Handled = true;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        // 记录异常信息</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        LogException(e.Exception, "UnhandledException");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        // 显示友好的错误提示</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        ShowErrorDialog("应用遇到了一些问题，已尝试恢复。");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="关键点说明">关键点说明<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E5%85%B3%E9%94%AE%E7%82%B9%E8%AF%B4%E6%98%8E" class="hash-link" aria-label="关键点说明的直接链接" title="关键点说明的直接链接" translate="no">​</a></h4>
<table><thead><tr><th>属性/方法</th><th>说明</th></tr></thead><tbody><tr><td>e.Exception</td><td>获取异常对象，包含堆栈跟踪等信息</td></tr><tr><td>e.Handled = true</td><td>标记异常已处理，<strong>应用不会崩溃</strong></td></tr><tr><td>e.Handled = false</td><td>标记未处理，应用会终止</td></tr></tbody></table>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="️-重要提示">⚠️ 重要提示<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%EF%B8%8F-%E9%87%8D%E8%A6%81%E6%8F%90%E7%A4%BA" class="hash-link" aria-label="⚠️ 重要提示的直接链接" title="⚠️ 重要提示的直接链接" translate="no">​</a></h4>
<p>UnhandledException <strong>只能捕获 UI 线程上的异常！</strong> 后台线程、异步任务中的异常需要其他方式处理。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="三taskschedulerunobservedtaskexception">三、TaskScheduler.UnobservedTaskException<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E4%B8%89taskschedulerunobservedtaskexception" class="hash-link" aria-label="三、TaskScheduler.UnobservedTaskException的直接链接" title="三、TaskScheduler.UnobservedTaskException的直接链接" translate="no">​</a></h3>
<p>处理 <strong>async/await 任务中未被观察到的异常</strong>。当 Task 被 GC 回收且异常未被观察时触发。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="使用方法">使用方法<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95" class="hash-link" aria-label="使用方法的直接链接" title="使用方法的直接链接" translate="no">​</a></h4>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">public App() {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    this.InitializeComponent();</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    this.UnhandledException += OnAppUnhandledException;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    // 订阅未观察到的任务异常</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    TaskScheduler.UnobservedTaskException += OnTaskUnobservedException;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">private void OnTaskUnobservedException(object sender, UnobservedTaskExceptionEventArgs e) {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    e.SetObserved();  // 标记异常已被观察</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    LogException(e.Exception, "UnobservedTaskException");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    // 可以选择显示提示或记录日志</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="实际场景示例">实际场景示例<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E5%AE%9E%E9%99%85%E5%9C%BA%E6%99%AF%E7%A4%BA%E4%BE%8B" class="hash-link" aria-label="实际场景示例的直接链接" title="实际场景示例的直接链接" translate="no">​</a></h4>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">// 这样的代码可能会导致 UnobservedTaskException</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">async Task DangerousMethod() {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    await Task.Run(() =&gt; {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        throw new InvalidOperationException("后台操作失败");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    });</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">// 调用但不等待或处理异常</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">_ = DangerousMethod();  // 异常可能被忽略</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="最佳实践">最佳实践<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5" class="hash-link" aria-label="最佳实践的直接链接" title="最佳实践的直接链接" translate="no">​</a></h4>
<p>始终使用 try-catch 包裹异步操作，或使用 await + try-catch 正确处理异常。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="四特定场景的异常处理">四、特定场景的异常处理<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E5%9B%9B%E7%89%B9%E5%AE%9A%E5%9C%BA%E6%99%AF%E7%9A%84%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86" class="hash-link" aria-label="四、特定场景的异常处理的直接链接" title="四、特定场景的异常处理的直接链接" translate="no">​</a></h3>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="文件-io-操作">文件 I/O 操作<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E6%96%87%E4%BB%B6-io-%E6%93%8D%E4%BD%9C" class="hash-link" aria-label="文件 I/O 操作的直接链接" title="文件 I/O 操作的直接链接" translate="no">​</a></h4>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">private async Task LoadFileAsync(string filePath) {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    try   {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        var file = await StorageFile.GetFileFromPathAsync(filePath);</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        var content = await FileIO.ReadTextAsync(file);</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        // 处理文件内容...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    catch (FileNotFoundException ex)   {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        await ShowErrorDialog($"文件不存在: {filePath}");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        LogException(ex, "FileNotFound");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    catch (UnauthorizedAccessException ex)   {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        await ShowErrorDialog($"没有权限访问文件");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        LogException(ex, "UnauthorizedAccess");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    catch (Exception ex)   {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        await ShowErrorDialog($"读取文件失败: {ex.Message}");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        LogException(ex, "FileIOError");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="网络请求异常">网络请求异常<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E7%BD%91%E7%BB%9C%E8%AF%B7%E6%B1%82%E5%BC%82%E5%B8%B8" class="hash-link" aria-label="网络请求异常的直接链接" title="网络请求异常的直接链接" translate="no">​</a></h4>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">private async Task&lt;HttpResponseMessage&gt; SendRequestAsync(string url) {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    try</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        using var client = new HttpClient();</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        client.Timeout = TimeSpan.FromSeconds(30);</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        return await client.GetAsync(url);</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    catch (HttpRequestException ex)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        LogException(ex, "NetworkError");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        throw new NetworkException("网络连接失败，请检查网络设置", ex);</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    catch (TaskCanceledException ex)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        LogException(ex, "RequestTimeout");</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        throw new TimeoutException("请求超时，请稍后重试", ex);</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="五小烨远控的异常处理实践">五、小烨远控的异常处理实践<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E4%BA%94%E5%B0%8F%E7%83%A8%E8%BF%9C%E6%8E%A7%E7%9A%84%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86%E5%AE%9E%E8%B7%B5" class="hash-link" aria-label="五、小烨远控的异常处理实践的直接链接" title="五、小烨远控的异常处理实践的直接链接" translate="no">​</a></h3>
<p>在实际开发中，异常处理不仅是为了防止崩溃，更是为了<strong>帮助开发者快速定位问题</strong>。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="一键反馈">一键反馈<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E4%B8%80%E9%94%AE%E5%8F%8D%E9%A6%88" class="hash-link" aria-label="一键反馈的直接链接" title="一键反馈的直接链接" translate="no">​</a></h4>
<p>在小烨远控中，我们设计了便捷的异常反馈机制：</p>
<p><strong>如果您在使用小烨远控的过程中发生了异常，只需点击异常界面的一键反馈即可将错误信息反馈给我们，错误信息不包含任何个人数据。</strong></p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260329-173342-3eb0c7df3e76a7153ad864d16ef94f80.png" width="931" height="504" class="img_ev3q"></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="功能特点">功能特点<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E5%8A%9F%E8%83%BD%E7%89%B9%E7%82%B9" class="hash-link" aria-label="功能特点的直接链接" title="功能特点的直接链接" translate="no">​</a></h4>
<table><thead><tr><th>特性</th><th>说明</th></tr></thead><tbody><tr><td>🔒 <strong>数据安全</strong></td><td>仅收集异常堆栈和系统环境信息，不包含任何用户数据</td></tr><tr><td>⚡ <strong>一键操作</strong></td><td>无需填写表单，点击即可完成反馈</td></tr><tr><td>🔄 <strong>实时通知</strong></td><td>开发者可及时收到异常报告并修复</td></tr></tbody></table>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="六最佳实践总结">六、最佳实践总结<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E5%85%AD%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%E6%80%BB%E7%BB%93" class="hash-link" aria-label="六、最佳实践总结的直接链接" title="六、最佳实践总结的直接链接" translate="no">​</a></h3>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="-do推荐做法">✅ DO（推荐做法）<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#-do%E6%8E%A8%E8%8D%90%E5%81%9A%E6%B3%95" class="hash-link" aria-label="✅ DO（推荐做法）的直接链接" title="✅ DO（推荐做法）的直接链接" translate="no">​</a></h4>
<ol>
<li class=""><strong>始终在最外层设置</strong> UnhandledException <strong>兜底</strong></li>
<li class=""><strong>记录详细的异常日志</strong>（类型、堆栈、时间、上下文）</li>
<li class=""><strong>给用户友好的提示</strong>，不要展示太琐碎的技术日志；</li>
<li class=""><strong>在适当的层级处理特定异常</strong>（如网络、文件操作）</li>
<li class=""><strong>提供异常反馈渠道</strong>，让用户能帮助改进应用</li>
</ol>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="-dont避免做法">❌ DON'T（避免做法）<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#-dont%E9%81%BF%E5%85%8D%E5%81%9A%E6%B3%95" class="hash-link" aria-label="❌ DON'T（避免做法）的直接链接" title="❌ DON'T（避免做法）的直接链接" translate="no">​</a></h4>
<ol>
<li class=""><strong>不要吞掉异常而不记录</strong>（e.Handled = true 但啥也不做）</li>
<li class=""><strong>不要在 UI 线程执行耗时操作</strong>（用 async/await）</li>
<li class=""><strong>不要忽略 Task 的异常</strong>（使用 try-catch 或 await）</li>
<li class=""><strong>不要在 catch 中抛出相同异常</strong>（会丢失堆栈信息）</li>
<li class=""><strong>不要在生产环境显示完整的异常堆栈给用户</strong></li>
</ol>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="结语">结语<a href="https://xiaoyeapp.com/zh-cn/blog/2026/04/07/winui3-exception#%E7%BB%93%E8%AF%AD" class="hash-link" aria-label="结语的直接链接" title="结语的直接链接" translate="no">​</a></h3>
<p>异常处理是桌面应用开发中<strong>不可忽视的基础设施</strong>。WinUI 3 提供了完善的异常处理机制，合理利用这些机制，可以让您的应用更加健壮、用户更加满意。</p>
<p>记住：<strong>好的异常处理不是让应用永不报错，而是当错误发生时，应用能够优雅降级、记录问题、帮助用户恢复操作。</strong></p>
<hr>
<p><em>如果您在使用小烨远控过程中遇到任何问题，欢迎通过异常界面的一键反馈功能告诉我们，帮助我们做得更好！</em></p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="WinUI" term="WinUI"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Windows桌面开发：初识WinUI 3]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3"/>
        <updated>2026-03-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[引言]]></summary>
        <content type="html"><![CDATA[<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="引言">引言<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#%E5%BC%95%E8%A8%80" class="hash-link" aria-label="引言的直接链接" title="引言的直接链接" translate="no">​</a></h3>
<p>作为一名Windows桌面开发者，你是否曾困惑过：微软到底有多少个UI框架？Win32、MFC、WinForms、WPF、UWP、WinUI……这些名词让人眼花缭乱。今天，我们就来梳理一下Windows UI框架的发展历程，并重点介绍微软当前主推的<strong>WinUI 3</strong>，带你迈出Windows现代桌面开发的第一步。</p>
<!-- -->
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="一windows-ui框架的三代演进">一、Windows UI框架的三代演进<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#%E4%B8%80windows-ui%E6%A1%86%E6%9E%B6%E7%9A%84%E4%B8%89%E4%BB%A3%E6%BC%94%E8%BF%9B" class="hash-link" aria-label="一、Windows UI框架的三代演进的直接链接" title="一、Windows UI框架的三代演进的直接链接" translate="no">​</a></h3>
<p>回顾Windows桌面开发的历史，我们可以将这些框架大致划分为三个阶段：</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第一代原生时代--win32--mfc">第一代：原生时代 — Win32 / MFC<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#%E7%AC%AC%E4%B8%80%E4%BB%A3%E5%8E%9F%E7%94%9F%E6%97%B6%E4%BB%A3--win32--mfc" class="hash-link" aria-label="第一代：原生时代 — Win32 / MFC的直接链接" title="第一代：原生时代 — Win32 / MFC的直接链接" translate="no">​</a></h4>
<p><strong>Win32 API</strong> 是Windows最底层的界面编程接口，直接与操作系统对话。用Win32开发桌面应用，你需要手动处理窗口消息（WM_PAINT、WM_CLOSE等），管理句柄和资源。优点是性能极高、控制力强，但缺点是开发效率低，即便是创建一个按钮也需要几十行代码。</p>
<p><strong>MFC（Microsoft Foundation Classes）</strong> 是对Win32的C++封装，将窗口、控件等抽象为C++类，简化了开发流程。在90年代到2000年代初，MFC曾是Windows桌面开发的主流选择。但由于其依赖C++的复杂性和历史遗留问题，如今已逐渐退出舞台。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/win32mfc-f565a355dc753cccbc25791e44236a57.png" width="852" height="476" class="img_ev3q"></p>
<p><strong>特点</strong>：底层、高性能、开发效率低、现代开发中较少使用</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第二代托管时代--winforms--wpf">第二代：托管时代 — WinForms / WPF<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#%E7%AC%AC%E4%BA%8C%E4%BB%A3%E6%89%98%E7%AE%A1%E6%97%B6%E4%BB%A3--winforms--wpf" class="hash-link" aria-label="第二代：托管时代 — WinForms / WPF的直接链接" title="第二代：托管时代 — WinForms / WPF的直接链接" translate="no">​</a></h4>
<p>随着.NET Framework的推出，微软带来了两款重磅的托管UI框架：</p>
<p><strong>WinForms</strong> 于2002年随.NET Framework 1.0发布。它采用“所见即所得”的设计理念，拖拽式开发极为直观，代码简单易懂。对于传统的业务系统开发（如进销存、ERP），WinForms至今仍有大量应用。</p>
<p><strong>WPF（Windows Presentation Foundation）</strong> 于2006年发布，带来了革命性的变化：采用XAML声明式UI、矢量图形、数据绑定、MVVM模式。WPF让界面与逻辑分离，实现了真正的“UI与代码解耦”。目前仍有大量企业级应用运行在WPF之上。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/winformwpf-381d835b530e3f4f38cfdefe24ca6352.png" width="786" height="443" class="img_ev3q"></p>
<p><strong>特点</strong>：托管代码、开发效率高、生态成熟、WPF适合复杂界面开发</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="第三代现代时代--winrt--uwp--winui">第三代：现代时代 — WinRT / UWP / WinUI<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#%E7%AC%AC%E4%B8%89%E4%BB%A3%E7%8E%B0%E4%BB%A3%E6%97%B6%E4%BB%A3--winrt--uwp--winui" class="hash-link" aria-label="第三代：现代时代 — WinRT / UWP / WinUI的直接链接" title="第三代：现代时代 — WinRT / UWP / WinUI的直接链接" translate="no">​</a></h4>
<p><strong>WinRT（Windows Runtime）</strong> 随Windows 8推出，为触摸屏和Metro风格而生，引入了一种新的应用模型和API设计。</p>
<p><strong>UWP（Universal Windows Platform）</strong> 是WinRT的进化版，口号是“一次开发，多端运行”（PC、Xbox、HoloLens等）。UWP支持现代UI特性（如亚克力效果、流畅动画），但由于应用分发必须通过Microsoft Store，且API受限，开发者接受度不高。</p>
<p><strong>WinUI 3</strong> 是微软最新的原生UI框架，可以看作是UWP的“解绑版”——它将UWP的现代UI控件库独立出来，不再强制要求通过Store分发，允许开发者使用完整的Windows API。WinUI 3是微软目前<strong>唯一重点投入</strong>的桌面UI框架。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/winui3-44de3b4e12c173dc155799cbc4b23a55.png" width="686" height="443" class="img_ev3q"></p>
<p><strong>特点</strong>：现代UI、完全原生、无分发限制、微软当前主力方向</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="二为什么要选择winui-3">二、为什么要选择WinUI 3？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#%E4%BA%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E9%80%89%E6%8B%A9winui-3" class="hash-link" aria-label="二、为什么要选择WinUI 3？的直接链接" title="二、为什么要选择WinUI 3？的直接链接" translate="no">​</a></h3>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-官方战略方向">1. 官方战略方向<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#1-%E5%AE%98%E6%96%B9%E6%88%98%E7%95%A5%E6%96%B9%E5%90%91" class="hash-link" aria-label="1. 官方战略方向的直接链接" title="1. 官方战略方向的直接链接" translate="no">​</a></h4>
<p>从微软的官方宣言和版本迭代来看，WinUI 3已成为Windows桌面开发的<strong>主力框架</strong>。WinForms和WPF虽然仍会维护，但新特性基本不再增加；而WinUI 3持续迭代，与Windows 11的新特性紧密结合。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-现代化的ui体验">2. 现代化的UI体验<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#2-%E7%8E%B0%E4%BB%A3%E5%8C%96%E7%9A%84ui%E4%BD%93%E9%AA%8C" class="hash-link" aria-label="2. 现代化的UI体验的直接链接" title="2. 现代化的UI体验的直接链接" translate="no">​</a></h4>
<p>WinUI 3内置了Fluent Design（流畅设计体系），让你的应用天生具备：</p>
<ul>
<li class=""><strong>云母材质（Mica）</strong> 和 <strong>亚克力效果（Acrylic）</strong>：毛玻璃般的质感</li>
<li class=""><strong>圆角与动效</strong>：符合Windows 11的设计语言</li>
<li class=""><strong>深色/浅色主题自动适配</strong>：无需额外代码</li>
</ul>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-完全的api访问权限">3. 完全的API访问权限<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#3-%E5%AE%8C%E5%85%A8%E7%9A%84api%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90" class="hash-link" aria-label="3. 完全的API访问权限的直接链接" title="3. 完全的API访问权限的直接链接" translate="no">​</a></h4>
<p>与UWP不同，WinUI 3应用可以调用<strong>所有Windows API</strong>（包括注册表、系统服务、文件系统任意位置等），没有沙盒限制。这意味着你可以将现有Win32/WPF应用的强大功能平滑迁移到现代UI上。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="4-多种分发方式">4. 多种分发方式<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#4-%E5%A4%9A%E7%A7%8D%E5%88%86%E5%8F%91%E6%96%B9%E5%BC%8F" class="hash-link" aria-label="4. 多种分发方式的直接链接" title="4. 多种分发方式的直接链接" translate="no">​</a></h4>
<p>WinUI 3应用可以：</p>
<ul>
<li class="">直接以.exe方式运行</li>
<li class="">打包为MSIX通过Microsoft Store分发</li>
<li class="">通过其他安装包工具分发</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="三创建你的第一个winui-3应用">三、创建你的第一个WinUI 3应用<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#%E4%B8%89%E5%88%9B%E5%BB%BA%E4%BD%A0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AAwinui-3%E5%BA%94%E7%94%A8" class="hash-link" aria-label="三、创建你的第一个WinUI 3应用的直接链接" title="三、创建你的第一个WinUI 3应用的直接链接" translate="no">​</a></h3>
<p>理论讲完，我们来动手创建一个简单的WinUI 3应用。</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="步骤1创建项目">步骤1：创建项目<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#%E6%AD%A5%E9%AA%A41%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE" class="hash-link" aria-label="步骤1：创建项目的直接链接" title="步骤1：创建项目的直接链接" translate="no">​</a></h4>
<ol>
<li class="">打开Visual Studio 2022，点击“创建新项目”</li>
<li class="">在模板搜索框中输入“WinUI”，选择 <strong>“空白应用，打包（WinUI 3）”</strong></li>
<li class="">点击“创建”，输入项目名例如“小烨远控”，即可创建一个普通的WinUI3项目</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/ScreenShot_2026-03-30_202235_169-b6c1f78fd582884c34a24632644eeebe.png" width="894" height="528" class="img_ev3q"></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="步骤2认识项目结构">步骤2：认识项目结构<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/30/first-look-at-winui3#%E6%AD%A5%E9%AA%A42%E8%AE%A4%E8%AF%86%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84" class="hash-link" aria-label="步骤2：认识项目结构的直接链接" title="步骤2：认识项目结构的直接链接" translate="no">​</a></h4>
<p>创建完成后，你会看到这样的结构：</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="WinUI" term="WinUI"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[优雅地调整您的远程桌面显示：从固定分辨率到自动适配]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/03/27/adjust-resolution</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/03/27/adjust-resolution"/>
        <updated>2026-03-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[如果你用过远程桌面，大概率经历过这样的场景：窗口想拉大一点，画面就糊了；想铺满整个屏幕，又得提前设好分辨率，连上就改不了。这不是哪个软件的错，而是Windows远程桌面长期存在的三种显示模式，各自带着一套设计逻辑。]]></summary>
        <content type="html"><![CDATA[<p>如果你用过远程桌面，大概率经历过这样的场景：窗口想拉大一点，画面就糊了；想铺满整个屏幕，又得提前设好分辨率，连上就改不了。这不是哪个软件的错，而是Windows远程桌面长期存在的三种显示模式，各自带着一套设计逻辑。</p>
<!-- -->
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="一全屏模式"><strong>一、全屏模式</strong><a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/27/adjust-resolution#%E4%B8%80%E5%85%A8%E5%B1%8F%E6%A8%A1%E5%BC%8F" class="hash-link" aria-label="一全屏模式的直接链接" title="一全屏模式的直接链接" translate="no">​</a></h3>
<p><strong>设计思路</strong></p>
<p>这是最直觉的一种方式。进入“全屏”后，远程桌面瞬间铺满整个屏幕，标题栏、边框、任务栏统统隐去，只剩下对端电脑的桌面。你就像坐在那台电脑前一样，视野完全被接管。</p>
<p>在全屏显示模式下，远程窗口通常会占据你当前所在的屏幕，鼠标被锁定在其中。想切回本地看个消息、回个微信，需要按一下退出全屏的快捷键。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-fullscreen7868609-0-0cff0fb3cf09e0262b9d1c3895d50494.png" width="784" height="418" class="img_ev3q"></p>
<p><strong>体验特点</strong></p>
<ul>
<li class="">沉浸感最强，适合长时间专注工作</li>
<li class="">画面利用率高，不受本地窗口布局影响</li>
<li class="">在多显示器环境下，全屏通常会占据当前屏幕，鼠标被锁定在其中</li>
</ul>
<p><strong>适用场景</strong></p>
<p>需要暂时“住”在远程电脑里，不受本地任务打扰的时候。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="二固定分辨率模式"><strong>二、固定分辨率模式</strong><a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/27/adjust-resolution#%E4%BA%8C%E5%9B%BA%E5%AE%9A%E5%88%86%E8%BE%A8%E7%8E%87%E6%A8%A1%E5%BC%8F" class="hash-link" aria-label="二固定分辨率模式的直接链接" title="二固定分辨率模式的直接链接" translate="no">​</a></h3>
<p><strong>设计思路</strong></p>
<p>这种方式更“传统”。在连接之前，你告诉客户端：我要一个 800x600的桌面。于是远程主机真的按这个分辨率输出画面，客户端则原样呈现，每个像素都对应得整整齐齐。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260327-091139-4fc56925363258fe31f6b5578905cb0f.png" width="384" height="514" class="img_ev3q"></p>
<p><strong>体验特点</strong></p>
<ul>
<li class="">画面清晰锐利，点对点显示</li>
<li class="">不受本地窗口大小影响，远程桌面内容布局稳定</li>
<li class="">当你用固定分辨率模式连接远程桌面后，窗口本身是有最大尺寸限制的——你不能把它拖到超过预设分辨率的尺寸。</li>
</ul>
<p><strong>适用场景</strong></p>
<p>对画质有要求、窗口大小基本固定的场景，比如远程调试代码、查看设计稿。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="三缩放模式"><strong>三、缩放模式</strong><a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/27/adjust-resolution#%E4%B8%89%E7%BC%A9%E6%94%BE%E6%A8%A1%E5%BC%8F" class="hash-link" aria-label="三缩放模式的直接链接" title="三缩放模式的直接链接" translate="no">​</a></h3>
<p><strong>设计思路</strong></p>
<p>窗口拖多大，远程桌面就填多大。画面通过插值算法等比缩放，始终铺满当前窗口。这背后其实是一套插值算法在起作用。窗口变大了，内容被“撑大”；窗口变小了，内容被“压缩”。结果是：画面始终适配窗口，但文字边缘不再那么锐利，图标细节也略有损失。如果你在 4K 屏幕上把一个远程窗口缩得比较小，那些文字可能变得不太好辨认。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/Adaptive-scaling9879878960-f96f7fd30d4d42be82d9b271fc2c1b48.png" width="827" height="581" class="img_ev3q"></p>
<p><strong>体验特点</strong></p>
<ul>
<li class="">窗口可以任意调整，画面始终按照比例适配</li>
<li class="">适应性最强，无论窗口形状、大小如何变化，都能完整显示</li>
<li class="">缩放过程中，画面清晰度会有所变化，文字和图标细节不如原分辨率锐利</li>
</ul>
<p><strong>适用场景</strong></p>
<p>日常办公、窗口大小经常变化的操作，对画质不苛求的场景。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="四三种模式各自取舍"><strong>四、三种模式，各自取舍</strong><a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/27/adjust-resolution#%E5%9B%9B%E4%B8%89%E7%A7%8D%E6%A8%A1%E5%BC%8F%E5%90%84%E8%87%AA%E5%8F%96%E8%88%8D" class="hash-link" aria-label="四三种模式各自取舍的直接链接" title="四三种模式各自取舍的直接链接" translate="no">​</a></h3>
<p>从设计初衷来看，这三种模式分别满足了不同的使用习惯：</p>
<table><thead><tr><th>模式</th><th>核心价值</th><th>特点</th></tr></thead><tbody><tr><td>全屏</td><td>沉浸</td><td>独占屏幕，专注感强</td></tr><tr><td>固定分辨率</td><td>清晰</td><td>点对点显示，画面稳定</td></tr><tr><td>缩放</td><td>灵活</td><td>随窗口自适应，操作自然</td></tr></tbody></table>
<p>它们各自的侧重点不同。但有一个共同点：<strong>分辨率在连接后就固定了</strong>——全屏模式下分辨率由显示器决定，固定分辨率模式下由预设值决定，缩放模式下虽然窗口可以变，但画质会随缩放比例变化。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="五小烨远控在清晰与灵活之间找到一个新答案"><strong>五、小烨远控：在清晰与灵活之间，找到一个新答案</strong><a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/27/adjust-resolution#%E4%BA%94%E5%B0%8F%E7%83%A8%E8%BF%9C%E6%8E%A7%E5%9C%A8%E6%B8%85%E6%99%B0%E4%B8%8E%E7%81%B5%E6%B4%BB%E4%B9%8B%E9%97%B4%E6%89%BE%E5%88%B0%E4%B8%80%E4%B8%AA%E6%96%B0%E7%AD%94%E6%A1%88" class="hash-link" aria-label="五小烨远控在清晰与灵活之间找到一个新答案的直接链接" title="五小烨远控在清晰与灵活之间找到一个新答案的直接链接" translate="no">​</a></h3>
<p>有没有一种方式，既能像缩放模式那样随意调整窗口，又能像固定分辨率那样保持画面清晰？</p>
<p>小烨远控的做法是：<strong>动态调整分辨率，而不是缩放画面</strong>。</p>
<p>当窗口被拖大时，它告诉远程主机：“现在屏幕变大了，请按新尺寸输出画面。” 当窗口缩小时，同样也会实时调整。每一次窗口变化，都触发一次分辨率更新，画面始终以 1:1 的方式呈现，不做任何插值，没有锯齿，也没有留白。</p>
<p>整个过程不需要重连，不需要手动设置，窗口怎么变，画面就怎么适配。它既没有缩放模式的模糊，也没有固定分辨率的“一锤子买卖”，更不需要像全屏那样“锁死”你的操作。</p>
<p>这种体验，更像是你在操作一台本地电脑：窗口可以随意拖拽，内容始终清晰。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/cn-xiaoyeremote-switch-f8226b9a063abb820b0c8574d948c974.png" width="798" height="444" class="img_ev3q"></p>
<p>注：小烨远控是为了两台异地电脑打通互联用的，因此需要在两台电脑上登录使用；</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="Windows远程" term="Windows远程"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[小烨远控 2.0.78 发布：更清晰的网络状态与托盘图标体验]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/03/02/xiaoyeremote-2078</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/03/02/xiaoyeremote-2078"/>
        <updated>2026-03-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[亲爱的用户，小烨远控迎来 2.0.78 版本更新！本次更新聚焦于两大体验优化，让远程控制更直观、更便捷。]]></summary>
        <content type="html"><![CDATA[<p>亲爱的用户，小烨远控迎来 2.0.78 版本更新！本次更新聚焦于两大体验优化，让远程控制更直观、更便捷。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/networkstatus-zh-d5d4ae0a4e3406c8bcd80cd40186eb31.png" width="687" height="442" class="img_ev3q"></p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="-更新亮点">✨ 更新亮点<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/02/xiaoyeremote-2078#-%E6%9B%B4%E6%96%B0%E4%BA%AE%E7%82%B9" class="hash-link" aria-label="✨ 更新亮点的直接链接" title="✨ 更新亮点的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="-更清晰的网络状态显示">📊 更清晰的网络状态显示<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/02/xiaoyeremote-2078#-%E6%9B%B4%E6%B8%85%E6%99%B0%E7%9A%84%E7%BD%91%E7%BB%9C%E7%8A%B6%E6%80%81%E6%98%BE%E7%A4%BA" class="hash-link" aria-label="📊 更清晰的网络状态显示的直接链接" title="📊 更清晰的网络状态显示的直接链接" translate="no">​</a></h3>
<ul>
<li class="">网络连接状态一目了然，实时显示当前网络状态</li>
<li class="">状态提示更加直观，网络异常时快速感知</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="️-托盘图标全面升级">🖥️ 托盘图标全面升级<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/02/xiaoyeremote-2078#%EF%B8%8F-%E6%89%98%E7%9B%98%E5%9B%BE%E6%A0%87%E5%85%A8%E9%9D%A2%E5%8D%87%E7%BA%A7" class="hash-link" aria-label="🖥️ 托盘图标全面升级的直接链接" title="🖥️ 托盘图标全面升级的直接链接" translate="no">​</a></h3>
<ul>
<li class="">新增系统托盘图标，最小化窗口后可常驻托盘运行，再也不用担心误关窗口了😂</li>
<li class="">后台运行时不再占用任务栏空间，桌面更整洁</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="-为什么这些更新很重要">🎯 为什么这些更新很重要？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/02/xiaoyeremote-2078#-%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%BA%9B%E6%9B%B4%E6%96%B0%E5%BE%88%E9%87%8D%E8%A6%81" class="hash-link" aria-label="🎯 为什么这些更新很重要？的直接链接" title="🎯 为什么这些更新很重要？的直接链接" translate="no">​</a></h2>
<p><strong>网络状态可视化</strong>让你在远程办公、技术支持时，能够第一时间发现网络波动，避免因网络问题导致的操作延迟或中断。</p>
<p><strong>托盘图标功能</strong>则是为了那些需要长时间保持远程连接的用户——服务器管理员、远程工作者等。现在你可以将程序最小化到托盘，既保持连接又不会干扰日常工作。</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="-立即体验">📥 立即体验<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/02/xiaoyeremote-2078#-%E7%AB%8B%E5%8D%B3%E4%BD%93%E9%AA%8C" class="hash-link" aria-label="📥 立即体验的直接链接" title="📥 立即体验的直接链接" translate="no">​</a></h2>
<p>小烨远控 2.0.78 已全面推送，欢迎更新体验！</p>
<p>下载地址：<a href="https://xiaoyeapp.com/download" target="_blank" rel="noopener noreferrer" class="">https://xiaoyeapp.com/download</a></p>
<p>感谢大家一直以来的支持！我们会持续优化，带来更好的远程桌面体验。</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="动态" term="动态"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Windows远程桌面：打造属于你的专属快捷方式]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/03/20/rdp-file-basic</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/03/20/rdp-file-basic"/>
        <updated>2026-03-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[在日常工作中，远程桌面（mstsc）是我们连接服务器或办公电脑的常用工具。每次都输入IP地址、用户名和密码确实有点繁琐。今天，我就来分享几个小技巧，帮你把远程桌面变成一键连接的快捷方式。]]></summary>
        <content type="html"><![CDATA[<p>在日常工作中，远程桌面（mstsc）是我们连接服务器或办公电脑的常用工具。每次都输入IP地址、用户名和密码确实有点繁琐。今天，我就来分享几个小技巧，帮你把远程桌面变成一键连接的快捷方式。</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="一基础操作保存rdp文件">一、基础操作：保存RDP文件<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/20/rdp-file-basic#%E4%B8%80%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E4%BF%9D%E5%AD%98rdp%E6%96%87%E4%BB%B6" class="hash-link" aria-label="一、基础操作：保存RDP文件的直接链接" title="一、基础操作：保存RDP文件的直接链接" translate="no">​</a></h2>
<p>Windows远程桌面连接（mstsc.exe）允许我们将连接配置保存为一个扩展名为.rdp的文件，这样下次就不用重新填写所有信息了。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="操作步骤">操作步骤：<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/20/rdp-file-basic#%E6%93%8D%E4%BD%9C%E6%AD%A5%E9%AA%A4" class="hash-link" aria-label="操作步骤：的直接链接" title="操作步骤：的直接链接" translate="no">​</a></h3>
<ol>
<li class="">按下Win + R键，输入mstsc，打开远程桌面连接窗口</li>
<li class="">输入计算机IP地址和用户名</li>
<li class="">点击“连接”按钮下方的“显示选项”展开更多设置</li>
<li class="">在“常规”选项卡中，点击下方的“另存为”按钮</li>
<li class="">选择保存位置，输入文件名，点击保存</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-ScreenShot_2026-03-20_164307_701-41da7cf175069ea9bda441c5334cde31.png" width="489" height="647" class="img_ev3q"></p>
<p>现在你桌面上就有了一个rdp文件，双击它就能快速发起连接。</p>
<p><img decoding="async" loading="lazy" src="data:image/png;base64,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" width="73" height="82" class="img_ev3q"></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="二进阶技巧让rdp文件记住密码">二、进阶技巧：让RDP文件记住密码<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/20/rdp-file-basic#%E4%BA%8C%E8%BF%9B%E9%98%B6%E6%8A%80%E5%B7%A7%E8%AE%A9rdp%E6%96%87%E4%BB%B6%E8%AE%B0%E4%BD%8F%E5%AF%86%E7%A0%81" class="hash-link" aria-label="二、进阶技巧：让RDP文件记住密码的直接链接" title="二、进阶技巧：让RDP文件记住密码的直接链接" translate="no">​</a></h2>
<p>默认保存的RDP文件不会包含密码，每次连接还是需要手动输入。要实现真正的“一键连接”，我们需要一个小技巧。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="两步搞定记住密码">两步搞定记住密码：<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/20/rdp-file-basic#%E4%B8%A4%E6%AD%A5%E6%90%9E%E5%AE%9A%E8%AE%B0%E4%BD%8F%E5%AF%86%E7%A0%81" class="hash-link" aria-label="两步搞定记住密码：的直接链接" title="两步搞定记住密码：的直接链接" translate="no">​</a></h3>
<p><strong>第一步：先勾选“保存凭据”，然后另存为rdp文件；</strong></p>
<p><strong><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260314-163938-8d429bc19e5b8a039a86e840c55ee698.png" width="480" height="648" class="img_ev3q"></strong></p>
<p><strong>第二步：运行rdp文件</strong></p>
<ol>
<li class="">再次双击rdp文件，此时需要输入一次密码，完成连接后将自动保存；</li>
</ol>
<p>原理：rdp文件的“记住凭据”操作将凭据保存到了Windows凭据管理器中，以后双击这个RDP文件，就能直接登录，无需再次输入密码。</p>
<p><strong>提醒：公共电脑上不要随便保存凭据；</strong></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="三安全提示rdp文件的黄色警告">三、安全提示：RDP文件的黄色警告<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/20/rdp-file-basic#%E4%B8%89%E5%AE%89%E5%85%A8%E6%8F%90%E7%A4%BArdp%E6%96%87%E4%BB%B6%E7%9A%84%E9%BB%84%E8%89%B2%E8%AD%A6%E5%91%8A" class="hash-link" aria-label="三、安全提示：RDP文件的黄色警告的直接链接" title="三、安全提示：RDP文件的黄色警告的直接链接" translate="no">​</a></h2>
<p>双击RDP文件时，你可能会看到一个黄色的安全警告：</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260314-162325-e45d039f52d821594434b8cd815a1cdc.png" width="586" height="377" class="img_ev3q"></p>
<p>这个警告是Windows出于安全考虑而设计的，因为RDP文件可能来自不可信来源，双击后会自动执行连接。但如果你是自己创建的RDP文件，或者来自可信同事，这个警告每次出现确实有点烦人。</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="如何让rdp文件变得可信">如何让RDP文件变得“可信”？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/20/rdp-file-basic#%E5%A6%82%E4%BD%95%E8%AE%A9rdp%E6%96%87%E4%BB%B6%E5%8F%98%E5%BE%97%E5%8F%AF%E4%BF%A1" class="hash-link" aria-label="如何让RDP文件变得“可信”？的直接链接" title="如何让RDP文件变得“可信”？的直接链接" translate="no">​</a></h3>
<p>要让Windows信任你的RDP文件，需要对其进行数字签名。签名后的RDP文件会有以下特征：</p>
<ul>
<li class="">黄色警告栏变为蓝色或绿色（表示发布者已验证）</li>
<li class="">显示“此远程连接已由可信发布者签名”</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="rdp文件签名方法">RDP文件签名方法：<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/20/rdp-file-basic#rdp%E6%96%87%E4%BB%B6%E7%AD%BE%E5%90%8D%E6%96%B9%E6%B3%95" class="hash-link" aria-label="RDP文件签名方法：的直接链接" title="RDP文件签名方法：的直接链接" translate="no">​</a></h3>
<ol>
<li class=""><strong>使用代码签名证书</strong>：可以从正规CA（如Symantec、DigiCert）购买代码签名证书</li>
<li class=""><strong>使用rdpsign签名</strong>：</li>
</ol>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">rdpsign /sha256 &lt;你的证书指纹&gt; &lt;rdp文件&gt;</span><br></div></code></pre></div></div>
<ol start="3">
<li class=""><strong>验证签名</strong>：右键点击RDP文件 &gt; 属性 &gt; 数字签名选项卡，可以看到签名信息</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260314-161914-6e000bc1faf5a76daeb9999378213a1d.png" width="584" height="376" class="img_ev3q"></p>
<p>再次双击rdp文件，看起来清爽了不少。当然签名不仅仅是为了好看，更重要的是为了防止关键信息的篡改，如果别人修改了你的rdp文件关键信息，签名信息将瞬间失效，会再次弹出橙色警告。</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="四总结与最佳实践">四、总结与最佳实践<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/20/rdp-file-basic#%E5%9B%9B%E6%80%BB%E7%BB%93%E4%B8%8E%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5" class="hash-link" aria-label="四、总结与最佳实践的直接链接" title="四、总结与最佳实践的直接链接" translate="no">​</a></h2>
<ol>
<li class=""><strong>个人日常使用</strong>：按步骤二设置记住密码的RDP文件，方便快捷；</li>
<li class=""><strong>团队共享连接</strong>：使用未保存密码的RDP文件，配合共享密码管理工具</li>
<li class=""><strong>安全敏感环境</strong>：启用组策略中的“始终提示密码”，或使用证书签名的RDP文件</li>
<li class=""><strong>跨平台使用</strong>：其他平台的支持rdp协议的远程桌面客户端一般也支持rdp文件导入，这样也会方便不少；</li>
</ol>
<p>如果您使用小烨远控，默认和rdp文件体验效果一致，双击即可连接，您也可以选择记住密码，记住密码和上述过程类似，都是保存至您的本地系统Windows凭据管理器；</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260320-165947-3dc3380d49d5ebf7d6d61889036ec31e.png" width="798" height="432" class="img_ev3q"></p>
<p>掌握了这些技巧，相信你的远程工作体验会更加顺畅。如果你有任何问题或更好的建议，欢迎在评论区留言讨论！</p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="Windows远程" term="Windows远程"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[小烨远控2.0.82发布：两台设备永久免费]]></title>
        <id>https://xiaoyeapp.com/zh-cn/blog/2026/03/18/2082-two-devices-free</id>
        <link href="https://xiaoyeapp.com/zh-cn/blog/2026/03/18/2082-two-devices-free"/>
        <updated>2026-03-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[还在为远程办公时复杂的网络配置烦恼？或为寻找一款既安全又免费的远控方案而四处尝试？今天，小烨远控带来的新版本，或许正是您需要的答案。]]></summary>
        <content type="html"><![CDATA[<p>还在为远程办公时复杂的网络配置烦恼？或为寻找一款<strong>既安全又免费</strong>的远控方案而四处尝试？今天，小烨远控带来的新版本，或许正是您需要的答案。</p>
<p>我们很高兴地宣布，<strong>小烨远控2.0.82版本正式发布！</strong> 本次更新带来了一个极具诚意的政策：<strong>两台设备，永久免费</strong>。无论您是为家庭电脑提供技术支持，还是需要在两个办公地点间无缝切换，这个免费版本足以覆盖大多数个人用户的日常需求。</p>
<p><img decoding="async" loading="lazy" src="https://xiaoyeapp.com/zh-cn/assets/images/zh-QQ20260318-143721-562ac9e3291faa0f7b897027d149ed4a.png" width="798" height="432" class="img_ev3q"></p>
<!-- -->
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="为什么选择小烨远控">为什么选择小烨远控？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/18/2082-two-devices-free#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9%E5%B0%8F%E7%83%A8%E8%BF%9C%E6%8E%A7" class="hash-link" aria-label="为什么选择小烨远控？的直接链接" title="为什么选择小烨远控？的直接链接" translate="no">​</a></h4>
<p>在免费的基础上，小烨远控更坚持在<strong>安全与体验</strong>上做到极致。</p>
<ol>
<li class=""><strong>安全，从底层设计开始</strong>
<ul>
<li class=""><strong>设备按账户隔离</strong>：您的设备仅对您自己的账户可见，天然避免了来自公网的随意扫描和攻击。</li>
<li class=""><strong>全程加密，无惧窥探</strong>：所有远程连接数据均经过高强度加密，确保您在公共网络下操作也足够私密。</li>
<li class=""><strong>无需公网IP</strong>：告别复杂的端口映射和网络配置，从根本上减少了网络攻击面。</li>
</ul>
</li>
<li class=""><strong>性能，为高效工作而生</strong>
<ul>
<li class=""><strong>国内多节点加速</strong>：我们在国内部署了多个网络节点，系统会自动为您选择最优路径，显著降低延迟，让远程操作像在本地一样流畅。</li>
<li class=""><strong>原生RDP体验</strong>：完美支持Windows远程桌面协议，如果您是Windows用户，能享受到最熟悉、最高效的原生桌面访问体验。</li>
</ul>
</li>
<li class=""><strong>便捷，一个账号通行</strong>
<ul>
<li class="">支持<strong>邮箱、微信、手机号</strong>等多种登录方式。您也可以使用已有的Microsoft、GitHub账号快速接入，无需重复注册。一个“小烨通行证”，即可管理您的所有远程设备和未来更多服务。</li>
</ul>
</li>
</ol>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="如何开始">如何开始？<a href="https://xiaoyeapp.com/zh-cn/blog/2026/03/18/2082-two-devices-free#%E5%A6%82%E4%BD%95%E5%BC%80%E5%A7%8B" class="hash-link" aria-label="如何开始？的直接链接" title="如何开始？的直接链接" translate="no">​</a></h4>
<p>体验小烨远控非常简单，只需三步：</p>
<ol>
<li class="">访问小烨远控官网（<a href="https://xiaoyeapp.com/" target="_blank" rel="noopener noreferrer" class="">https://xiaoyeapp.com</a>）下载客户端。</li>
<li class="">使用您喜欢的登录方式（邮箱账户需要先注册，第三方如微信则直接登录）。</li>
<li class="">在两台您自己的设备上登录同一账号，即可开始永久免费的远程之旅。</li>
</ol>
<p><strong>小烨远控2.0.82，致力于成为您安全、高速、简单的远程桌面伙伴。</strong> 无论您是远程办公的技术人员，还是帮家人维护电脑的“家庭IT顾问”，都欢迎来试试看。</p>
<p><strong>如果在使用中遇到任何问题，或有任何建议，欢迎随时通过官网渠道向我们反馈，我们将竭诚为您服务！</strong></p>]]></content>
        <author>
            <name>作者：小烨App</name>
        </author>
        <category label="动态" term="动态"/>
    </entry>
</feed>