winver
| Microsoft Windows 的组件 | |
Windows 11 2024 年更新中的 winver | |
| 推出于 | Windows 3.0 |
|---|---|
winver 是 Windows 版本(Windows Version)的缩写,是大多数 Microsoft Windows 版本中包含的实用程序,用于获取有关操作系统版本的信息。根据 Windows 版本的不同,此工具在基于 DOS 的 Windows 和 Windows NT 上的文件版本信息中也分别称为 Windows 版本实用程序(Windows-version utility)或版本报告小程序(Version Reporter Applet)。
历史
它最初是在 Windows 3.0 中引入的,在那里它被实现为一个简单的消息框,其中包含 Windows 徽标、主要和次要版本号、版权声明以及有关当前活动操作模式的信息。此工具还包括一个自定义的 MS-DOS 可执行存根,用于将版本信息打印到屏幕上。在整个经典的 Windows 系列中,它几乎没有变化,Windows 3.1 只更改了徽标,而 Windows 95 将版本信息简化到操作系统名称。
在基于 NT 的 Windows 版本中,该工具自 Windows NT 3.1 起便被纳入系统,其实现方式与16位版本类似——仅以一个简易窗口呈现,显示 Windows 徽标、版本号、构建号及版权声明。然而从 Windows NT 3.5 开始,该工具仅显示外壳关于框,除版本号和版权声明外,还包含计算机信息、注册所有者及可用内存容量等内容。
实现
Windows NT 3.5 及更高版本
在不包含独立 winver.exe 可执行文件的 Windows 版本(如 Windows Server Core 或 Windows 预安装环境)上,可以使用 rundll32 shell32,ShellAbout 命令调用此对话框。但是,当以这种方式调用时,对话框将不包含时间炸弹信息,原因在于此功能是小程序独有的。以这种方式调用时,对话框标题将显示乱码,这是因为 rundll32 预期的参数与函数的实际签名之间存在差异。[a]
Windows 2000
在开发Windows 2000期间引入时间炸弹机制后,winver被更新为可查询定时炸弹相关信息,若存在该机制,则会在关于框中显示其状态。
Windows 8
为防止进一步泄露并追踪泄露版本的安装情况,该小程序还添加了红色文字提示,说明未经授权用户使用该版本可能导致法律责任,并可能引发刑事诉讼等不可预见的后果。在 Windows 8.1 开发阶段,这些提示信息仍以临时形式存在,但后来被移除,自 Windows 指纹识别服务重新构建后便再未出现。
Windows 10 和 11
自 Windows 10 起,该小程序收到了渐进式的更新,通过引入注册表键来定义当前版本,这些版本会显示在“Version”标签之后。2020 年,为了区分开发版和与发布相关的 Windows 版本,引入了一个新的“Dev”版本,该版本随后暂时消失,并自 Windows 11 Dilithium 版本起重新出现,在 build 28000 之前一直沿用该版本。
图库
经典 Windows,也称早期 Windows
-
Windows for Workgroups 3.11 (from DOS)
Windows NT
-
Windows 8 Build 8014,并警告未经授权的使用
-
Windows 8
注
- ↑
rundll32期望被调用函数具有void CALLBACK EntryPoint (HWND hWnd, HINSTANCE hInst, LPSTR lpszCmdLine, int nCmdShow)的签名。标题栏中的乱码应用程序名称(MZ或 mojibake,具体取决于使用的是 API 的 -A 还是 -W 变体)是ShellAbout尝试将shell32.dll的可执行标头分析为零终止字符串字符串的结果。这是由第二个参数不匹配引起的,其中ShellAbout需要指向字符串的指针,而rundll32提供 DLL 的HINSTANCE,在 Win32 中是指向内存中加载模块的指针。