Why does the CreateProcess function do autocorrection? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050623-03/?p=35213
Raymond Chen 在 2005 年 6 月 23 日
为什么 CreateProcess 函数会进行自动更正?
译注:在文章中提到的 "CreateProcess function do autocorrection"(CreateProcess 函数进行自动更正)是指该函数在处理程序路径时的一种行为。具体来说,当一个程序在创建进程时传递给 CreateProcess 函数的可执行文件路径中包含空格,而没有使用引号正确地括起来,CreateProcess 函数会尝试自动更正这个问题,以确保程序能够正确地创建进程。
在早期的 Windows 系统中,一些程序在写入可执行文件路径到注册表时,并没有正确处理空格,因为在当时短文件名(SFN)路径中空格的使用非常罕见。因此,CreateProcess 函数在设计时需要考虑到这一点,以兼容那些没有正确处理空格的旧程序。
没有考虑到长文件名处理的程序可能会犯下一些错误,比如在将可执行文件的路径写入注册表时,没有意识到路径中可能包含需要用引号括起来的空间。(虽然技术上允许,但在短文件名(SFN)路径中,空格的使用极为罕见。)
CreateProcess 函数面临一个选择:是自动更正这些无效路径,还是让程序因此停止运行。
这是一个实用主义与纯粹主义之间的较量。
纯粹主义者可能会说:“让他们为他们的错误付出代价吧。我们不会为了迁就这种低级错误而破坏我们完美的架构。”然而,这种态度是有代价的:如果一个标榜“纯粹”的系统无法运行用户所需的程序,用户就不会选择使用它。
换句话说,如果你的产品不能持续发展到 2.0 版本,那么无论 1.0 版本多么出色,都无济于事。
你是选择“保持纯粹但无人问津”,还是“追求实用而广受欢迎”?历史上充满了许多技术上先进但因缺乏市场接受度而消亡的例子,如索尼的 Betamax 录像带、美泰的 Intellivision 游戏机(以及在美国,公制测量系统也是同样的命运)。
电动汽车也是一个例子。尽管电动汽车非常出色,但它们在市场上从未取得过显著的成功。只有当它们放弃一定的“纯粹性”,通过增加汽油混合动力引擎来迎合市场口味时,电动汽车才最终获得了市场的认可。
我不断看到这样的情况发生。比如,一个假设中的产品团队,他们制作了自动化绘图软件,可能会说:“我简直不敢相信我们在竞争中输给了 Z 公司。诚然,Z 公司的图表可能更快、更吸引人,但我们的软件在处理<微妙细节>上更为准确。当你遇到<极端情况>时,他们的图表会出现轻微的变形。他们之所以更快,是因为他们没有尝试防止在<场景 Q>中 X 和 Y 发生重叠。我们做到了这一切;这就是为什么我们的速度较慢,但也正因为如此,我们的产品更优秀。Z 公司的人根本‘不懂’。”
你猜怎么着?消费者正在用他们的钱包做出选择,而他们当前的选择表明,尽管存在那些“可怕的缺点”,Z 公司的产品仍然更受欢迎。消费者可能不理解他们产品中的“某些方面”,但他们显然理解“让足够多的人满意到愿意为之付费”的重要性。