翻译《The Old New Thing》 - Why does the CreateProcess function do autocorrection?

Why does the CreateProcess function do autocorrection? - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://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 公司的产品仍然更受欢迎。消费者可能不理解他们产品中的“某些方面”,但他们显然理解“让足够多的人满意到愿意为之付费”的重要性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【华为OD机试C卷D卷】符号运算(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 给定一个表达式,求其分数计算结果。 表达式的限制如下: 所有的输入数字皆为正整数(包括0) 仅支持四则运算(+-*,/)和括号 结果为整数或分数,分数必须化为最简格…

13_Scala面向对象编程_伴生对象

文章目录 1.伴生对象1.1 scala的一个性质&#xff0c;scala文件中的类都是公共的&#xff1b;1.2 scala使用object关键字也可以声明对象&#xff1b; 3.关于伴生对象和类4.权限修饰符&#xff0c;scala仅有private;5.伴生对象可以访问伴生类中的私有属性&#xff1b;6.案例7.伴…

世界十大最具影响力人物颜廷利:真正的高人,靠谱的行为

对于真正的‘高人’&#xff0c; 在面对‘狗洞’时&#xff0c; 他们都比较理智&#xff0c; 从来都不趾高气扬&#xff0c; 因为他们晓得&#xff0c; 倘若说不能弯下腰&#xff0c; 并而直立着身子走路的话&#xff0c; 那么&#xff0c; 他们就不是纯粹的‘高人’&#xff0…

华为OD机试题:字符串变换最小字符串

题目描述&#xff1a; 给定一个字符串s&#xff0c;最多只能进行一次变换&#xff0c;返回变换后能得到的最小字符串&#xff08;按照字典序进行比较&#xff09;。 变换规则&#xff1a;交换字符串中任意两个不同位置的字符。 一串小写字母组成的字符串s 输出描述 按照要求进…

启程Python机器学习之旅:从JupyterLab到神经网络初探

引言 在数据科学和人工智能的浪潮中&#xff0c;Python已经成为最受欢迎的编程语言之一。其简洁的语法和强大的库支持&#xff0c;使得从科研到商业的各个领域都能见到Python的身影。今天&#xff0c;我们将通过JupyterLab——一个交互式的开发环境&#xff0c;开始我们的Pyth…

1850H-The Third Letter

题目链接&#xff1a;The Third Letter 本道题目就是带权并查集的模板题&#xff0c;但又好久没学忘了&#xff0c;再复习一遍。。。 路径压缩函数模板&#xff1a; int root(int x){if(pre[x]!x){int troot(pre[x]);d[x]d[pre[x]];pre[x]t;}return pre[x]; } 之后就模拟一…

c++ 红黑树学习及简单实现

1. 了解红黑树 1.1. 概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个节点增加一个存储位表示节点的颜色&#xff0c;可以是红色&#xff0c;或是黑色&#xff0c;通过对任何一条从根到叶子的路径上各个节点的着色方式进行限制&#xff0c;红黑树确保没有一条路…

初识webpack项目

新建一个空的工程 -> % mkdir webpack-project 为了方便追踪执行每一个命令&#xff0c;最终产生了哪些变更&#xff0c;将这个空工程初始化成git项目 -> % cd webpack-project/-> % git init Initialized empty Git repository in /Users/lixiang/frontworkspace/…

selenium自动化,Chrome 启动参数

常用参数 常用参数请参考下表。 序号参数说明1--allow-outdated-plugins不停用过期的插件。2--allow-running-insecure-content默认情况下&#xff0c;https 页面不允许从 http 链接引用 javascript/css/plug-ins。添加这一参数会放行这些内容。3--allow-scripting-gallery允许…

R语言 统计篇之T-test 检验

《Cookbook for R》 Statistical Analysis 数据统计篇之 T-test 检验 当你想测试两个样本是否来自均值不同的群体 或者测试一个样本是否来自均值不同于某个理论均值的群体。 示例数据&#xff1a;R内置数据集 sleep sleep #> extra group ID #> 1 0.7 1 1 #…

AI文章框架分析

大家在文章写作的时候结构难免会有点凌乱&#xff0c;但是自己可能无法发现问题所在&#xff0c;那么有没有一款工具可以帮你自动分析你写的文章框架存在的问题&#xff0c;然后并给你详细的分析报告呢&#xff1f;今天给大家介绍一下文件框架分析助手&#xff01; 使用说明 打…

如何配置X86应用程序启用大地址模式(将用户态虚拟内存从2GB扩充到3GB),以解决用户态虚拟内存不够用问题?(项目实战案例解析)

目录 1、概述 2、为什么不直接将程序做成64位的&#xff1f; 3、进程内存不足导致程序发生闪退的案例分析 3.1、问题说明 3.2、将Windbg附加到程序进程上进行动态调试 3.3、动态调试的Windbg感知到了中断&#xff0c;中断在DebugBreak函数调用上 3.4、malloc或new失败的…

IoTDB 入门教程 问题篇②——RPC远程连接IoTDB服务器失败

文章目录 一、前文二、发现问题三、分析问题四、检查6667端口是否监听所有IP五、检查ECS云服务器的安全组是否允许六、检查Linux防火墙是否允许 一、前文 IoTDB入门教程——导读 二、发现问题 使用本地IP127.0.0.1可以连接IoTDB服务器使用远程IPxx.xx.xx.xx却连接不到。提示你…

【Python】回溯法解全排列问题

题目 给定一个不含重复数字的数组&#xff0c;返回其所有可能的全排列。 分析 要实现全排列&#xff0c;就有一个长度与原数组相等的数组&#xff0c;数组的第一位可能是原数组中的任意一位&#xff0c;第二位是除了第一位的原数组的任意一位&#xff0c;第三位则是除了前两位…

C++中的reverse_iterator迭代器结构设计

目录 reverse_iterator迭代器结构设计 reverse_iterator迭代器基本结构设计 operator*()函数 operator()函数 operator->()函数 operator!()函数 rbegin()函数 rend()函数 operator--()函数 operator()函数 测试代码 const_reverse_iterator迭代器设计 reverse…

【蓝桥2025备赛】容斥原理

容斥原理 背景&#xff1a;两个集合相交 高中的韦恩图&#xff0c;我们知道两个集合相交时我们可以通过简单的计算来认识相关的性质 集合相交的区域是 A ∩ B A\cap B A∩B ,集合的并集是 A ∪ B A\cup B A∪B ,那怎么用集合表示 A ∪ B A\cup B A∪B 我们可以看作是A集合…

华为OD试题之第k长子串

第k长子串 题目描述 给定一个字符串 只包含大写字母 求在包含同一字母的子串中 长度第K长的子串 相同字母只取最长的子串 输入描述 第一行 一个子串 1 < len < 100 只包含大写字母 第二行为k的值 输出描述 输出连续出现次数第k多的字母的次数 如果子串中只包含同一字母…

探索 CSS 动画中的 steps() 函数:精准控制动画节奏

在CSS动画的世界里&#xff0c;steps() 函数是一个强大而灵活的工具&#xff0c;它允许开发者精确地控制动画的播放方式&#xff0c;尤其适用于创建逐帧动画效果或实现类似幻灯片的过渡效果。本文将深入探讨steps()函数的工作原理、语法、应用场景及实战代码示例&#xff0c;帮…

分布式与一致性协议之ZAB协议(一)

ZAB协议 概述 很多人应该都使用过ZooKeeper&#xff0c; 它是一个开源的分布式协调服务&#xff0c;比如你可以用它进行配置管理、名字服务等。在ZooKeeper中&#xff0c;数据是以节点的形式存储的。如果你要用ZooKeeper做配置管理&#xff0c;那么就需要在里面创建指定配置&…

OceanBase 分布式数据库【信创/国产化】- OceanBase 平台产品 - 迁移评估工具 OMA

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 平台产品 - 迁移评估工具 OMA前言OceanBase 数据更新架构OceanBase 平台产品 - 迁移评估工具 OMA兼容性评估性能评估导出 OceanBase 数据库对象和 SQL 语句OceanBase 分布式数据库【信创/国产…