最近笔者在微软新闻组先后看到若干个 Windows 外观视觉样式(Windows Themes)显示不正确的问题,并在回复帖子时提了不少建议。笔者打算以此为题写一篇 Windows Themes 故障汇总,总结八个比较有代表性的引起 Themes 显示异常的问题。这里所说的 Themes 包括 Windows XP/Server 2003 的外观样式、Windows Vista/Server 2008/Windows 7 的 Basic 样式以及 AERO 样式。
★ 如果 Windows 无法应用任何 Themes、只能选择类似 Windows 2000 的经典外观:
1.系统服务 Themes 没有开启。
系统服务是最常见的引起 Windows 无法应用 Themes 的原因之一,特别是 Windows Server 系统,默认不开启此服务。以管理员权限执行 %SystemRoot%\system32\SERVICES.MSC 打开“服务”设置,将 Themes 服务开启、并将其运行方式修改为“自动”即可解决(Windows Server 2003)。
Windows Server 2008 仅开启 Themes 服务依然不够,还需要通过“管理工具”-“服务器管理”-“打开或关闭功能”-“添加功能”,手动添加默认没有安装的“桌面体验(Desktop Experience)”组件方可。微软官方提供的参考信息为:
http://support.microsoft.com/kb/946397
笔者认为,Windows Server 2008 既然默认不安装“桌面体验”,其实完全没有必要预设一个根本无法生效的 Themes 服务,此服务完全可以在安装“桌面体验”时再添加。
2.视觉样式文件夹 Windows\Resources\themes 中的资源受损。
如果在选择 Themes 的列表中无法找到部分或全部选项,可能是视觉样式文件夹 Windows\Resources\themes 中的相关文件丢失或受损。
Windows XP 家庭版/专业版、Windows Server 2003 默认内置有 Luna;
Windows XP Media Center Edition 2005/Tablet PC Edition 2005 内置有 Luna 及 Royale Energy Blue;
Windows Vista/Server 2008 内置有 Aero。我们可以从其它相同版本的 Windows 计算机中直接复制 Windows\Resources\themes 文件夹进行修复。
3.与 Windows Shell 相关的若干系统文件受损或需要重新注册。
除了 Windows\Resources\themes 中的资源外,Windows Shell 相关的若干系统文件如果受损也可能会引起无法应用 Themes,甚至可能会在控制面板中打开“显示”属性时出现 RUNDLL32 运行错误。这些相关的系统文件包括 Explorer.EXE、Shell32.DLL、User32.DLL、Desk.CPL、ThemeUI.DLL 等,解决方法是 SFC /SCANNOW 检测并修复。
如果确认所有系统文件都没有损坏,但依然无法应用 Themes 或在打开“显示”属性时出现 RUNDLL32 运行错误,可以尝试执行 REGSVR32 MMSYSTEM.DLL 重新注册一下此文件。少数极端情况是除了 MMSYSTEM.DLL 外,还有其它系统文件也需要重新注册(此现象一般发生在查杀病毒后发现无法应用 Themes),此时可以将如下语句:
for %1 in (%WinDir%\system32\*.DLL) do REGSVR32.EXE /s %1
保存为 .BAT 批处理并运行,重新注册一下 system32 中的所有 .DLL 文件。但除了 Windows 系统文件外,某些位于 system32 的第三方 .DLL 也将被一并重新注册,可能会引起一些不必要的麻烦。
此外,控制面板的“显示”属性出现 RUNDLL32 运行错误的另一种可能是显示驱动程序配置不正确,如果以安全模式启动 Windows 可以正常打开“显示”属性,可能需要回到正常模式重新安装显示驱动程序。特别是有时在 Windows Vista 或以上版本中如果可以应用 Basic 样式、但却无法应用 AERO 样式,则很有可能是显示驱动程序配置不当或显卡本身不支持 DirectX 9 所致。
4.与 Themes 相关的若干注册表项受损。
除了系统文件的受损或需要重新注册外,某些与 Themes 相关的注册表项受损也可能引起无法正常应用 Themes。这些注册表项主要有:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ThemeManager
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Themes
(其中最后一条是 Themes 系统服务的注册表项,如果之前已经发现 Themes 服务损坏无法启动,可能是此注册表项受损所致)
解决方法是从其它相同版本的 Windows 计算机中导出上述注册表项为 .REG 文件,复制过来并导入注册表,然后重新启动计算机。
除了 HKEY_CURRENT_USER 与 HKEY_LOCAL_MACHINE 之外,如果 Windows 登录界面的 Themes 遇到问题,还可以修复 HKEY_USERS\.DEFAULT 中的相关设置。例如我们知道 Windows Server 2003 默认是只使用经典样式的,虽然可以开启 Themes 服务并在控制面板中应用 Themes,但只限于当前登录的用户帐户、对 Windows 登录对话框无效。此时我们便可以在将当前用户帐户的 Themes 设置好之后,将 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\
ThemeManager 的所有数据原样照搬至 HKEY_USER\.DEFAULT\Software\Microsoft\Windows\
CurrentVersion\ThemeManager,这样即可将当前用户帐户应用的 Themes 应用至登录对话框。
★ 如果 Windows 可以应用内置的 Themes、但无法应用来自第三方的 Themes:
在默认的系统设置中,Windows 仅允许应用系统内置的有限的几种 Themes。为了突破 Windows 的限制应用来自第三方的 Themes,通常有两种方法。
5.重新替换破解版的 UxTheme.DLL。
Windows 默认对 Themes 的限制来源于 Windows\system32\UxTheme.DLL。网上有很多解除限制的破解版 UxTheme.DLL 可供下载,将破解版的 UxTheme.DLL 通过故障恢复控制台、多重操作系统或 Windows PE 等复制至系统文件夹,替换源文件即可解除限制。
6.重新安装第三方 Themes 管理工具。
StyleXP 等第三方 Themes 管理工具可以以自建立的服务全面接管 Windows 的 Themes 服务,通过第三方软件的服务即可直接应用来自第三方的 Themes,因此我们可以重新安装相应的第三方 Themes 管理工具以突破 Windows 无法应用第三方 Themes 的限制,例如 StyleXP。
★ 如果 Windows 可以应用 Themes、但 Themes 却显示残缺不完整:
这个问题主要出现在一些版本较早的 Windows 2000 甚至 Windows 9X 旧版程序中,某些旧版程序是无法全部或部分应用 Themes 的。
7.使用 eXeScope 为旧版程序设置“XP 样式”。
eXeScope 提供了为应用程序设置“XP 样式”的选项。某些不支持 Themes 的旧版程序经过 eXeScope 修改后可能可以支持 Themes,但不是全部,特别是 Windows Vista 的 AERO 样式,某些旧版程序经过修改可能可以支持 Basic 样式、但需要 DirectX 9 渲染的 AERO 却始终无法生效。
我们可以以 eXeScope 打开旧版应用程序的相关 .EXE 或 .DLL 文件,选中工具栏提供的“XP 样式”后保存修改。如果 eXeScope 显示此文件“早已是 XP 样式”后依然无法应用 Themes,那么这样的旧版应用程序可能就无法解决了。
8.解除不支持 Themes 的旧版程序附加在 Explorer.EXE 中的扩展插件。
某些比较“黏人”的旧版程序不仅自己无法应用 Themes、而且还会为 Explorer.EXE 也附加上很多扩展插件,这样可能会连带着引起 Windows 的某些系统界面也无法应用 Themes。我们可以下载运行 ShellExView 对 Explorer.EXE 的扩展插件进行排查:
http://www.nirsoft.net/utils/shexview.zip
运行后选中可能无法应用 Themes 的非 Microsoft 第三方扩展插件,通过右键菜单 Disable Selected Items 将其禁用即可,重新启动 Windows 后观察受影响的 Windows 系统界面能否恢复正常。