mise 升级又出幺蛾子

使用 mise 管理 Windows 平台的开发工具已经有一阵子了。这几天突然发现 mise 管理的 PHP 失效了。现象是找不到 php 命令、重新安装 PHP 失败。疑为某次 mise 版本升级导致的问题。

……

Nim 编译器的古怪问题

Nim 是一门高度灵活的编程语言,其代码具有很强的多态与组合能力,尤其在使用 macro 时,语义往往需要在编译期展开后才能最终确定。这种高自由度的设计在增强抽象能力的同时,也引入了显著的语义不确定性,使得程序行为更依赖上下文推导与编译期分析。

最近碰到一个令人迷惑的 Nim 编译器问题。在某个模块中,我定义了如下的宏,用于提供对 config 对象的读写封装:

……

RegGetValueW 返回字符串数据大小不一致

Windows API RegGetValueW 函数的原型如下:

c++LSTATUS RegGetValueW(
  [in]                HKEY    hkey,
  [in, optional]      LPCWSTR lpSubKey,
  [in, optional]      LPCWSTR lpValue,
  [in, optional]      DWORD   dwFlags,
  [out, optional]     LPDWORD pdwType,
  [out, optional]     PVOID   pvData,
  [in, out, optional] LPDWORD pcbData
);

使用该 API 获取字符串值时,是否传递 pvData 参数会影响 pcbData 输出的值大小。

……

升级 PowerToys 后无法启动 Windows Terminal

现象

上周五(10月17日)进行了 Windows 系统更新和软件升级,升级的软件并不包含 Windows Terminal。本周一(10月20日)发现 Windows Terminal 无法启动——运行后在任务栏闪现窗口,但立即退出进程。尝试多个旧版本的 Windows Terminal,依然无法运行。

原因

起初怀疑是 Windows 更新导致的问题。另外发现 GitHub 上已经有人提交了 Issue,描述也是如此。这更加深了是 Windows 更新的嫌疑。不过项目维护者表示,引起崩溃的屎山代码已经有 3 年没人动过了,应该不至于有问题。

……

修复 scoop update 后 vcpkg 无法运行的故障

系统使用的 vcpkg 是由 scoop 安装的,在某次 scoop update -a 更新后故障无法运行。通过分析发现是由于安装脚本未能正确执行导致文件缺失引起的。以下是故障分析过程。

发现问题

打开 UniGetUI 更新时发现 vcpkg 的安装源不见了。

在命令行中运行 vcpkg 提示:

Shim: Could not determine if target is a GUI app. Assuming console.
Shim: Could not create process with command '"D:\Apps\scoop\apps\vcpkg\current\vcpkg.exe" '.

运行命令 scoop list vcpkg,显示软件已安装:

Installed apps matching 'vcpkg':

Name  Version    Source Updated             Info
----  -------    ------ -------             ----
vcpkg 2025.07.25 main   2025-07-29 10:56:05

尝试修复

看起来是 scoop shim 出了问题。尝试用 scoop reset vcpkg 命令重置。再次运行 vcpkg,无响应。接着尝试卸载 vcpkg 重新安装。运行 scoop uninstall vcpkg 命令,卡在运行 uninstall script 无响应。

……

GetSystemMenu() 可能损坏其他进程的窗口菜单

通过 Windows API GetSystemMenu 获取窗口系统菜单(即窗口标题栏右键菜单)句柄,可以实现自定义窗口菜单的功能。但若获取的窗口菜单句柄来自其他进程的窗口,便会引发问题。

……

热修复 Scoop 的 GIMP 3.0 安装脚本错误

Windows 包管理器 Scoop 上的 GIMP 3.0 已经发布一周多了,期间已经推送了三个版本。然而官方的安装脚本存在错误,导致用户无法正确安装,至今仍未解决。目前 GIMP 3.0 的安装配置主要存在两个问题:

  1. 软件安装包解压缩失败
  2. 安装脚本中的文件路径不正确

问题一只要将 Scoop 默认的 innounp 卸载并替换成 innounp-unicode 就行了:

powershellscoop uninstall innounp 
scoop install versions/innounp-unicode

问题二的错误信息如下:

……

记一次 WinGet 升级故障排查

本文记录一次 WinGet 升级故障排查的过程。最终删除了 Windows 应用商店安装的版本,再使用 Scoop 重新安装,通过这种方式解决了问题。

已安装 .NET 运行时,但程序仍提示未安装

运行一个 C# 编写的程序,弹出如下提示:

dotnet

实际上系统已经安装 .NET Runtime 8.0,不过还是尝试通过错误消息中的链接下载 .NET Desktop Runtime 8.0 并重新安装。再次运行程序,仍然提示以上错误。

……

午餐外卖神秘消失事件

这是一个秋高气爽的午后,当我从摸鱼中回过神来时,已经错过了午餐时间。我拿起手机,慵懒地倚靠在办公椅中,一边划动着屏幕,一边思考接下来午餐该吃什么……

错过用餐时间并不是失误,而是有意为之。错峰用餐的好处有很多——比如出餐时间会更快;骑手不赶时间,有时会将外卖送上楼而不是放在楼下取餐柜,免去下楼取餐的麻烦;另外午餐吃得晚,下午也不容易饿。

……