![Windows 注册表中的神秘@字符](https://linux22.com/image/1299811/Windows%20%E6%B3%A8%E5%86%8C%E8%A1%A8%E4%B8%AD%E7%9A%84%E7%A5%9E%E7%A7%98%40%E5%AD%97%E7%AC%A6.png)
当我在 Windows 注册表中导航到“HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WMP.PlayCD\Shell\Play”时,我在 Windows 7 系统上找到了一个名为 MUIVerb 的 REG_EXPAND_SE。然而,它的内容中却包含“@%windir%\system32\wmploc.dll,-6503”
现在我的问题是:这个 @ 字符是什么意思或起什么作用?我是在 MS-DOS 中长大的,以前从未见过这样的符号。我应该将它解释为电子邮件地址中的 @ 吗?最终结果是什么。它最终会变成“C:\%windir%\system32\wmploc.dll,-6503”吗?
答案1
注册表本身只是一个分层的数据存储;符号和含义取决于使用数据的程序。
在这种情况下,MUIVerb
值是 Explorer 保存文件操作文本描述的位置。有一段时间,它们直接保存在注册表中,但当引入各种 Windows“语言包”时,可翻译文本被移至文件资源,以“ @
”开头的描述被 Explorer 解释为“文本存储在在以下位置(EXE/DLL 文件的编号为‘STRING’的资源)”。 (同一资源可能存在针对不同语言的多个版本。 您可以使用资源浏览器或类似工具来浏览 DLL 和 EXE 文件。)
上述“注册表作为数据存储”规则有一个例外。请注意,数据类型是REG_EXPAND_SZ
,而不是REG_SZ
。这意味着当 Explorer 读取值时,它将在其中扩展某些环境变量 - Explorer 将收到“ @C:\WINDOWS\system32\wmploc.dll,-6503
”(扩展%windir%
)。这是注册表值和数据可以拥有的唯一“特殊”的东西。
剩下的就完全取决于Explorer了——开头的“ @
”意味着Explorer需要加载一个库C:\WINDOWS\system32\wmploc.dll
,在其中找到一个字符串资源-6503
,并使用其内容作为最终的文本显示给用户。