“Windows 开发”标签的文章
带有“Windows 开发”标签的文章共 61 篇,按发布日期从新到旧排列。
-
快速启动的真面目 ── Windows 的「关机」为什么和重启不一样
Windows 的「关机」默认会变成混合关机,内核与驱动程序被保存到休眠文件,并在下次启动时还原。本文讲解为什么有些问题只有重启才能解决、对运行时间・更新・Wake on LAN 的影响、确认方法以及是否停用的判断。
-
Time Travel Debugging ── 把长期运行中不复现的缺陷“录下来”再倒回去
一个月才出一次的缺陷,崩溃转储只拍得到结果。本文讲解如何用 WinDbg 的 Time Travel Debugging(TTD) 录制执行并倒回,涵盖 TTD.exe 的录制设计、环形缓冲区、TTD.Calls 查询,以及与转储的分工。
-
参数为什么会坏掉 ── Windows 命令行参数的规则
在 Windows 上并不存在参数的数组,传给 CreateProcess 的是一条字符串,切分由接收方完成。本文讲解 CommandLineToArgvW・CRT・.NET 的切分规则,以及 .NET 的 ArgumentList 与 C++ 中正确的组装方法。
-
Windows 打印驱动程序停止提供 ── 业务应用的报表与标签打印如何应对
Microsoft 正在分阶段推进 v3/v4 打印驱动程序的停止提供,从 2026 年 7 月起会优先选择 IPP 类驱动程序。本文梳理 Windows protected print mode 下会消失什么,并用判断表整理业务应用程序的报表、标签打印中依赖点的盘点方法与应对方式。
-
WinRT 就是 COM —— IInspectable、.winmd、语言投影,以及 WinUI 至今仍立在二进制契约之上的原因
WinRT 不是托管运行时,而是在 COM 之上加了元数据(.winmd)与语言投影的 ABI。本文从 IUnknown 与 IInspectable 的关系,一直讲到桌面应用里 HWND 初始化与 package identity 的卡点。
-
父进程消失之后还剩下什么 —— 用 Job Object 圈养子进程
为什么强制结束 UI 之后,SDK 的辅助进程仍然残留,一直占着摄像头或 COM 端口?本文从测量应用的视角,讲解如何用 Job Object 把进程树变成一个单位,并借助 KillOnJobClose 与完成端口来设计子进程的寿命。
-
什么是 OLE 对象 —— 嵌入与链接的机制以及业务文档中的陷阱
在 Word 中嵌入 Excel 表格的功能,本质就是 OLE 对象。本文从嵌入与链接的区别、复合文件与结构化存储、In-Place Activation 的机制,一直讲到链接断开、文件膨胀与安全对策,全部立足于实务视角。
-
Win32 线程池 API ── 用 CreateThreadpoolWork 实现「不自建线程」的并发
原生代码里是不是到处都在 CreateThread?本文依据一手资料讲解 Vista 全面重新设计的 Win32 线程池 API:work、timer、wait、io 四种对象,清理组,以及回调中禁止做的事。
-
命名管道实务 ── 从设计到安全,吃透 Windows 进程间通信的标准方案
以实务视角讲解 Windows 进程间通信的标准方案——命名管道。依据一手资料梳理字节模式与消息模式的取舍、同时接纳多个客户端的服务器结构、ACL 与模拟的安全设计,以及 .NET 的命名管道流。
-
睡眠恢复后就出故障的应用——电源事件机制与扛得住恢复的业务应用设计
打开笔记本电脑时业务应用的通信已经断开——原因是设计没有考虑睡眠。本文依据一手资料讲解 WM_POWERBROADCAST 的通知流程、Modern Standby 的行为、断开与重连的设计、睡眠抑制以及调查命令。
-
DllMain 与加载器锁——“DLL 初始化里什么都别做”的真正原因
为什么不能在 DllMain 里调用 LoadLibrary 或与线程同步。本文依据一手资料,从串行化全部 DLL 通知的加载器锁机制,讲到死锁成立的典型场景、延迟初始化等正确设计,以及挂起的调查步骤。
-
“无响应”的真相——Windows 如何判定应用卡死,以及不会卡死的设计
Windows 的“无响应”是操作系统在窗口 5 秒未取出消息时作出判定、并换成幽灵窗口的机制。本文讲解判定的内部动作、卡死的常见原因、把繁重处理移出 UI 线程的设计,以及挂起的调查步骤。
-
剪贴板与拖放的工作原理——在业务应用中正确处理 OLE 数据传输
粘贴 Excel 表格会散架、关掉复制源就贴不上,根源都是剪贴板把同一内容放成多种格式的机制。本文讲解标准格式、延迟渲染、OLE 拖放,直到剪贴板历史与云同步的策略。
-
WPR/WPA 实战——从系统整体排查“整台 PC 变慢”的性能调查入门
“整台 PC 变慢”“开机很慢”这类任务管理器追不到的性能问题,可以用采集并阅读整个 OS 的 ETW 跟踪的 WPR/WPA 来排查。本文从 wpr.exe 的采集步骤,一直讲到在 WPA 中怎么读 CPU、等待时间和磁盘 I/O。
-
从应用角度看 Windows 关机——正确扛过退出通知、重启与断电
Windows Update 的夜间重启弄坏了测量数据——这类问题可以靠设计避免。本文依据一手资料讲解 WM_QUERYENDSESSION 与 PRESHUTDOWN 等退出通知的接收方式、几秒内做完的收尾,以及能扛住断电的保存设计。
-
Windows 应用兼容的运作机制——用兼容模式、Shim 与 Compatibility Administrator 为旧应用续命
为什么勾选兼容模式后旧应用就能运行。本文讲解其本质 Shim(API 挂钩)的机制、代表性 Shim 的功能、用 Compatibility Administrator 与 sdbinst 在组织内部署的方法、失效的界限,以及续命还是迁移的判断。
-
今天的 Windows 外壳集成——右键菜单、文件关联与 Windows 11 的变化
解读 Windows 11 中右键菜单被藏进“显示更多选项”的原因,并梳理扩展名→ProgID→verb 的关联基础、传统外壳扩展的注意事项,以及 IExplorerCommand 与 MSIX/sparse package 这套新方式。
-
解读 Windows 错误码——Win32 错误、HRESULT、NTSTATUS 的三层结构
出现 0x80004005 时,先分解再搜索。讲解 Win32 错误、HRESULT、NTSTATUS 的三层结构,0x8007xxxx=Win32 错误重新封装这一最重要模式,以及用 err.exe 和 PowerShell 查询的方法。
-
Windows 的“内存使用量”究竟表示什么——正确解读 Working Set、Private Bytes、Commit 与页面文件
任务管理器的内存、Working Set、Private Bytes 与 Commit 并不是同一个值。本文讲解 Windows 虚拟内存与物理内存的关系、页面文件的作用,以及排查内存不足和内存泄漏时应当关注的指标。
-
在 C# 与 PowerShell 中使用 WMI/CIM——硬件信息获取、进程监控与远程查询实务指南
获取电脑序列号、监控磁盘剩余空间、检测进程启动,这些需求的经典答案就是 WMI/CIM。本文讲解 Get-CimInstance 等 CIM cmdlet 的用法与从旧版 Get-WmiObject 的迁移、C# 中 System.Management 与 CIM API 的取舍,以及实用示例和常见陷阱。
-
ADR(Architecture Decision Record)入门 —— 在小规模开发中,用最简方法留住「为什么这样设计」
代码不会告诉你「为什么这样做」。本文讲解如何用 ADR(Architecture Decision Record),以「1 个决定 = 1 个 Markdown 文件」的方式记录设计判断的理由,并附带模板、写与不写的判断表,以及实际案例。
-
Arm 版 Windows 上业务应用能运行吗 ── x64 仿真(Prism)与原生 DLL・COM 的现实
面向开发者与信息系统部门,回答「Arm 版 Windows 上业务应用能运行吗」这一问题。梳理 x64 仿真(Prism)的原理、驱动程序等无法运行的层面、.NET 中 AnyCPU 与 P/Invoke 的组合问题,以及 Arm 适配自查清单。
-
接手了没有源代码也没有文档的系统 ── 在不中断运行的前提下开展运维保守的实务步骤
本文整理在没有源代码、也没有文档的业务系统上开始运维与保守工作的实务步骤。涵盖对运行环境的保全与备份、可执行文件与数据库的盘点、从行为中还原规格,以及续用、封装、重建之间的判断。
-
网络驱动器与 UNC 路径的陷阱 ── 业务应用中处理文件服务器(共享文件夹)的实务
本文整理业务应用向共享文件夹输出、监控时的常见故障:驱动器号(Z:)为何在服务中不可见、各执行账户所需的权限、错误 1219,以及 FileSystemWatcher 的注意事项。
-
Windows 应用的任务栏托盘常驻与 Toast 通知 —— NotifyIcon 的坑与 AppNotification 的选型
本文整理了将业务 Windows 应用常驻在任务栏托盘(通知区域)并通过 Toast 通知告知用户的实现要点。内容涵盖 NotifyIcon 的正确用法与「关闭后驻留托盘」的设计、资源管理器重启后的重新注册、三种 Toast API(Windows App SDK AppNotification / Commun...
-
VB6 应用能用到什么时候 ── 运行时支持现状与务实的 .NET 迁移做法
VB6 应用程序到底能用到什么时候?本文整理 VB6 运行时的支持政策(Windows 11 也在支持范围内)与 IDE 支持早已终止这一不对称现状,并以实务指南的形式说明全面重写、自动转换、分阶段迁移的判断表、迁移前的资产盘点、VB6 与 .NET 的不兼容之处,以及 C# 与 VB.NET 的选择。
-
业务应用程序的日本年号・法定节假日・结算日处理 —— 抗改元设计与 JapaneseCalendar・营业日计算实务
报表要显示「令和8年」、营业日计算要排除法定节假日、20日结算次月末付款——日本业务应用程序特有的日期处理背后,隐藏着「日后会变动的规格」:改元、法定节假日的法规修订、月末的进位。本文整理了用 JapaneseCalendar 显示年号、抗改元的设计方式,法定节假日不可写死在代码中的原因,以及利用内阁府 CSV ...
-
Process Monitor(ProcMon)实战指南 —— 10 分钟定位「配置未生效」「ACCESS DENIED」问题
「明明修改了配置文件却没有生效」「昨天还能正常运行,今天却突然启动不了」——在动手修改源代码之前,Process Monitor(ProcMon)可以从文件、注册表访问的实际情况入手定位原因。本文从故障排查一线的视角,讲解 Filter 的实用技巧、NAME NOT FOUND・ACCESS DENIED・SHA...
-
WinForms/WPF应用的多语言化 ── resx、附属程序集与区域文化切换的实务
本文从实务角度系统梳理Windows桌面应用多语言化的要点:CurrentCulture与CurrentUICulture的区别、resx与附属程序集构成的资源机制、WinForms的Localizable属性、WPF的现实方案选择、运行时语言切换,以及排版、格式、RTL等内容。
-
CSV 不是「纯文本」──C# 业务应用中 CSV 实务(字符编码・Excel 兼容性・注入攻击防范)
梳理业务应用 CSV 读写中常见的事故模式──用 Split(',') 自行解析、无 BOM 的 UTF-8 导致 Excel 乱码、前导零丢失、CSV 注入攻击──并从实务角度讲解 RFC 4180 规则、.NET 中 Shift_JIS 的处理方式(CodePagesEncodingProvider),以及使...
-
不要用 using 包裹 HttpClient —— C# 业务应用的 HTTP 通信实务(创建模式・超时设计・重试)
C# 的 HttpClient 如果每次都用 using 创建会导致套接字耗尽,改成 static 又无法跟上 DNS 变更——本文从 Windows 业务应用的实务角度,整理这两大问题的成因,以及通过 PooledConnectionLifetime、IHttpClientFactory 实现正确创建模式、超时...
-
不只是 appsettings.json ── Windows 业务应用的配置管理实务(环境差异化设置・敏感信息・写入位置)
本文从实务角度整理 Windows 业务应用的配置管理,涵盖 appsettings.json 的分层、IConfiguration 与 IOptions/IOptionsSnapshot/IOptionsMonitor 的选用方式、环境差异化设置、可写入配置的存放位置、敏感信息的处理、运行期配置变更,以及从 a...
-
Windows 业务应用程序的打印与 PDF 输出 ── System.Drawing.Printing / WPF / 报表库的取舍选型
本文按需求整理成判断表,梳理 PrintDocument 的 WinForms 打印、WPF 的 FlowDocument/FixedDocument 打印,以及 PDF 输出的可选方案。并从实务角度讲解分页控制、DPI 偏差等实现陷阱,以及从 Windows 服务打印、依赖默认打印机的风险。
-
VB6 / Access 业务应用的续用与迁移 ── 保留、封装、替换的判断表
VB6 应用程序与 Microsoft Access 业务应用该如何判断是直接保留、只封装一部分继续用,还是全面替换?本文整理运行环境现状、ACE 的 32bit/64bit 问题、共享文件夹多人使用风险,以及升级到 SQL Server 的判断表与实务步骤。
-
防止 Windows 应用程序重复启动 ── 命名 Mutex 与重复执行时的窗口前置
整理业务型 Windows 应用程序的常见需求——「不让同一个应用程序启动两次」——如何用命名 Mutex 来实现。涵盖 Global\ 与 Local\ 命名空间差异在 RDP 环境中的陷阱、拥有线程限制与 AbandonedMutexException、在 SetForegroundWindow 限制下把已有...
-
委托开发 Windows 应用程序前该梳理的事项
在委托外包开发 Windows 应用程序之前,梳理现有软件改造、设备联动、COM/ActiveX、发布与更新、维护等需要注意的要点。
-
COM/OCX/ActiveX 开发中容易踩坑的注册与位数陷阱
本文从实务角度整理 COM、OCX、ActiveX 开发中容易踩坑的 32bit/64bit、Visual Studio 2022、regsvr32/Regasm、管理员权限、HKCR、STA/MTA 等问题。
-
Windows 什么时候需要管理员权限 - UAC、保护区域与设计上的辨别方式
从边界与存储位置的角度,整理 Windows 什么时候真正需要管理员权限:UAC、保护区域、HKLM、服务、驱动、防火墙。同时说明 per-user 与 per-machine 的差异,以及把管理员处理拆成独立 EXE、服务或任务的设计取舍,帮读者判断该不该提升权限。
-
什么是 VBA——局限性、未来走向、该替换的场景与现实的迁移方式
整理 VBA 的基本概念与局限性、未来走向、该替换的场景,以及 Excel 宏与企业内部工具分阶段迁移的现实做法。
-
WinForms/WPF/WinUI 的选型方法 - 实务判断表
从全新开发、存量资产、发布、UI 表现力、团队构成这几个角度,梳理 WinForms、WPF、WinUI 到底该选哪一个。
-
共享内存的陷阱与实务最佳实践
整理在实务中使用共享内存时的陷阱,以及涵盖同步、可见性、生命周期、ABI、权限等降低出问题概率的设计方法。
-
Windows 用户配置文件入门 - AppData 与 NTUSER.DAT
整理 Windows 用户配置文件的基础、AppData 的区分使用、本地 / 漫游 / Mandatory / Temporary、Folder Redirection、FSLogix,以及损坏时的排查思路。
-
Excel 报表输出的实现方法 - COM / Open XML / 模板
Excel 报表输出的设计,会因为是自动操作 Excel、还是直接生成 xlsx、还是保留现有 VBA 而大不相同。本文以 Windows 应用和业务系统中的报表输出为前提,梳理方案选型的判断标准与推荐结构。
-
用 Media Foundation 把图片和文字烧录进 MP4 的方法
本文整理用 Media Foundation 向 MP4 视频的每一帧烧录图片与文字、生成新 MP4 的思路,梳理 Source Reader、绘制、色彩转换、Sink Writer 各自的职责分工,并给出单文件即可运行的 C++ 示例。
-
意外异常发生时,应用该终止还是继续的判断表
从状态破坏、外部副作用、线程、原生边界这几个角度,梳理发生意料之外的异常时,应该让应用终止还是继续运行。
-
在 Windows 应用中把“只需要管理员权限的处理”分离出来的具体写法
在 Windows 应用中让 UI 保持 asInvoker 不变,只把需要管理员权限的处理分离到 helper EXE。本文围绕 UAC、runas、命名管道与输入校验,具体梳理这套设计该怎么落地。
-
Windows 应用的敏感信息存储 - 用 DPAPI 摆脱明文配置
为了不把连接凭据和 API 令牌以明文形式存进 Windows 应用的配置文件,本文梳理 DPAPI / ProtectedData 的思路、CurrentUser 与 LocalMachine 的差别,以及实现时的注意事项。
-
从 .NET Framework 迁移到 .NET 的迁移前检查清单
在从 .NET Framework 迁移到 .NET 之前,逐项确认项目类别、不受支持的技术、NuGet 依赖、SDK 样式、WPF/WinForms、CI/CD 与运维的实务检查清单。
-
在 Media Foundation 中把 YUV 转换为 RGB 的方法
从 Source Reader 自动转换与 NV12/YUY2 手动转换、stride、色彩空间几个角度,梳理在 Media Foundation 中把 YUV 帧转换为 RGB 的方法。
-
Windows 网卡高级设置指南 - RSS/LSO/EEE/Wake on LAN
从实务角度梳理 Windows 网卡的高级设置。汇总 Jumbo Packet、Speed & Duplex、RSS、RSC、LSO、Flow Control、EEE、Wake on LAN 等项目,说明改动之后到底会发生什么变化。
-
用 Media Foundation 从 MP4 的指定时刻提取静止图像的方法
本文整理用 Source Reader 从 MP4 中取出最接近指定时刻的帧,处理好 stride 与 RGB32 的第 4 个字节(alpha)之后保存为 PNG 的完整实现步骤。
-
Windows 应用程序开发的安全最低限度检查清单
面向 WPF / WinForms / WinUI / C++ / C# 的业务应用程序,以检查清单的形式梳理权限、签名、更新、机密信息、HTTPS、输入验证、DLL 加载、日志这些方面的基本要点。
-
COM / ActiveX / OCX 是什么 - 区别与关系一并梳理
从实务视角梳理什么是 COM、什么是 ActiveX、什么是 OCX,一直讲到三者的区别与关系、与 OLE 的关联、它们被用在哪里,以及现在应该怎么看待它们。
-
ActiveX / OCX 现在该如何处理 - 保留、封装、替换的判断表
本文整理发现 ActiveX / OCX 时应该选择保留、封装还是替换,涵盖 32bit / 64bit、注册、浏览器依赖、供应商维护等因素。
-
用 Application Verifier 搭建 Windows 异常路径测试基础设施
梳理 Application Verifier 是什么,并结合用 Handles、Heaps、Low Resource Simulation、!htrace 搭建 Windows 异常路径测试基础设施的做法一起说明。
-
工业相机长期运行崩溃调查 - handle 泄漏篇
本文以工业相机控制应用长时间运行后突然崩溃的实际案例,从 handle 泄漏的排查方法与日志设计的角度,整理 Windows 应用长时间运行后崩溃时的排查思路。
-
文件集成互斥控制基础知识 - 文件锁与原子 claim 的最佳实践
本文从文件锁、原子 claim、temp -> rename、idempotency(幂等性)等角度整理文件集成的互斥控制,并总结在共享文件夹集成中避免出问题的设计方法。
-
从 C# 调用原生 DLL:C++/CLI 包装器 vs P/Invoke
本文从所有权、异常、C++ 类型、回调等角度,区分在 C# 中使用原生 DLL 时 P/Invoke 已经够用的场景与 C++/CLI 包装器更有效的场景,并整理插入一层薄包装的架构所带来的优点。
-
COM STA/MTA 基础 - 线程模型与避免 Hang 的思路
本文梳理 COM STA/MTA 的基础知识,涵盖 Apartment Model、UI 线程、消息循环、封送处理,直到避免 Hang 的思路。
-
32 位应用调用 64 位 DLL 的 COM 桥接实例
本文整理当 32 位应用无法直接调用 64 位 DLL 时,通过 COM 桥接进行集成的思路,并结合 Windows 的限制、架构构成与处理流程加以说明。
-
什么是 COM - 为什么 Windows COM 的设计至今依然优美
本文从 Windows COM 的接口设计、IUnknown、GUID、二进制兼容性等角度整理 COM 是什么,并说明它至今依然适用的原因。