“旧版点过‘我已知晓’的人,升到新版第一次打开,那个免责声明的框不弹了。这算 bug 还是设计?”

这是那阵子被丢过来的一句原话,问的是七亿批量远程管理工具(RdpManager)里那个一进来就弹的免责声明。按设计,新版第一次打开该弹一次,让人重新确认一遍。结果老用户升级上来,静悄悄就进去了,一句提示没有。

先把判定逻辑翻出来看。原来存的是一个布尔 DisclaimerAccepted:点过“我已知晓”就置 true,写进配置文件。新版本读到 true,就不再弹——它只认“有没有接受过”,不认“是哪个版本接受的”。所以从旧版升上来的老配置天然带着 true,新版一看,弹窗直接跳过。清空配置会恢复成“没接受”,才会重新弹。

改法很直接:把布尔换成按版本号记的 DisclaimerAcceptedVersion,存“已确认的版本”。当前版本不等于记的版本就弹一次,弹完记下当前版本;同一个版本里不再弹。删配置文件(.rdp-manager\connections.json)→ 版本号为空 → 会弹。另外补了个保护:只有弹窗真弹出来、点了确认,才写版本号,免得弹窗自己出了异常还被当成“已接受”。这版是 v165-V9。

然后方向被拍了一下。用着觉得每个版本都弹一次太烦,尤其小版本更新也弹——统一改成“一次确认,永久不弹”,换了版本也不再弹。于是我把版本号方案撤回来,又改回那个布尔 DisclaimerAccepted:点一次就置 true,此后(含升级)都不弹;只有重装或删配置文件才会再弹一次。这是 v165-V10。

再然后,话又绕回来了:要的就是“更新版本之后弹一次”。得,等于把 V10 当场作废,回到 V9 那套按版本记的逻辑。实现在 Utils.cs 的 ConfigData 加回 DisclaimerAcceptedVersion,判定挪回 Program.cs 按版本比。v165-V11。

三个版本,两个字段,来回横跳。每改一次口径我就改一次代码,改到第三版,我自己都得翻更新说明才记清当初为啥那么写。这活儿技术含量约等于零,折腾人的全是“到底想要哪一种”。

回头看,这段其实不亏。它逼我把“接受记录”这件事想清楚了:你要记的到底是“这个人接受过”,还是“这个人接受过这一版”?这是两回事,一个布尔字段答不了第二个问题。后来这根逻辑在别处也派上用场——更新提示要不要弹、内测标记怎么显示,走的都是版本比对,根子是同一根。当初来回改的那几版,等于把这条路先趟了一遍。

想自己看这框什么时候弹、什么时候不弹,官网的七亿批量远程管理工具说明书页里写了默认行为。至于那份声明本身,博客里挂着一篇七亿批量远程管理工具免责声明,一直置顶;这类“默认行为到底该怎样”的纠结,跟当初把远程桌面映射本地驱动器默认关掉是同一类取舍。