有些应用程序在高分辨率屏幕上无法很好地缩放。针对 Windows 上的这一问题,有人提出了解决方案(例如,适用于 Adobe CS6 应用程序) 是“使 Windows 能够优先考虑外部清单”通过更改注册表,然后为应用程序创建一个清单,告诉 Windows 应用其默认的 UI 缩放比例。
我坚信,在不了解系统级更改(如注册表更改)的含义的情况下,不要进行此类更改。我曾尝试研究如何让 Windows 优先处理外部清单,以了解更多信息,但我发现的只是这种技巧被用来让各种顽固的应用程序在高分辨率屏幕上缩放的示例。
我认为此注册表更改本质上允许在启动应用程序时读取某种类型的配置文件.manifest
(?)。我想了解启用它们的含义。我在研究中发现最接近答案的是这个Adobe 论坛上很有希望但不太权威的评论。我主要想知道这是否属实:
至于注册表更改的其他影响,只要您的可执行文件中没有其他与可执行文件本身相冲突的 .manifest 文件(这种情况应该很少见),这似乎是一个没有什么负面影响的更改。
具体来说(按顺序):
- 除了我手动为应用程序创建清单文件的情况外,此注册表更改是否不会影响任何系统行为?这篇文章让我认为情况确实如此。或者它是否有其他含义(例如,也许检查清单很常见,以至于减慢某些系统进程的速度?)
- 显然,配置不当的清单可能会破坏某个应用程序。是否还存在其他风险,例如安全问题(恶意软件创建清单?)最终用户在启用这些清单之前必须意识到这些风险?
- 这MSDN 文章听起来好像清单的存在是为了允许特定于应用程序的注册表覆盖。从外行角度来说,这是正确的解释吗?
如果 Windows 版本相关,我最感兴趣的是 Windows 8.1 和 Windows 7(按顺序)。
答案1
清单文件包含 Windows 如何在启动时处理模块的设置。正如您已经知道的那样,它可以嵌入模块本身,也可以作为 *.manifest 文件保留在外部。通常,嵌入的模块优先,因此如果模块已经有一个嵌入的模块,外部的模块将不计算在内。注册表设置会将此行为更改为首先计算外部的模块。
我不认为优先处理外部清单会降低系统性能。大多数进程在检查没有外部清单后都会正常运行。即使有,清单文件也是小型 xml 文件,因此处理它们不会花费太多时间。
确实有一些像您所说的情况。例如:http://www.symantec.com/security_response/vulnerability.jsp?bid=21550 因此出于安全考虑,我认为根本不要优先考虑外部清单是更安全的,即使 Windows 上没有持续存在的问题。
文章说,过去使用 Registry 实现了同样的目标。现在情况不同了,因为模块可以有内部清单。此外,清单不能用作通用注册表虚拟化。
实际上,有一种方法可以修改“内部”清单。本文说明了如何操作,风险自负。 http://csi-windows.com/toolkit/240-great-pe-editor-for-internal-manifests
我用自己开发的应用程序测试了这个技巧,效果很好。请注意,您应该从“开发者模式”开始保存 exe,需要删除现有清单,然后重新添加新清单。更不用说,不要忘记备份原始清单。
如果这个技巧对你有用,那将比改变优先级好得多。但是 - 商业应用程序可能无法工作,因为这种方式会破坏数字签名,并且可能会与保护措施发生冲突(如果有的话)。如果它不起作用,最好的方法应该是要求原始开发人员更改较新 Windows 版本的内部清单,或者找到可能已修复原始问题的较新版本的软件。