【问题标题】:Which programs must have manifest resource?哪些程序必须有清单资源?
【发布时间】:2011-03-06 20:59:24
【问题描述】:

Microsoft 的新 IDE(如 Visual Studio 2008 或 2010)默认创建带有清单资源的 exe 文件。但是我在 Visual Studio 6 中还有一些项目,我需要编译它们以最大程度地兼容 Win Vista 和 Win 7。
所以我对清单资源有很多疑问:
1. 为 Win7 或 WinVista 创建格式良好的应用程序是否需要 manifest 资源?
2. WinVista和Win7的minimal manifest需要哪些信息?
3、Windiws 7下错误的manifest资源会触发Program Compatibility Assistant吗?
4. DLL需要manifest资源吗?
5. 我在哪里可以获得有关使用清单的信息?

【问题讨论】:

    标签: visual-studio winapi windows-7 windows-vista


    【解决方案1】:

    1.为 Win7 或 WinVista 创建格式良好的应用程序是否需要清单资源?

    没有清单(带有 requestedExecutionLevel 元素)Windows Vista 和 Windows 7 使用启发式方法来尝试猜测应用程序是否是设置应用程序 - 这意味着普通应用程序可能会无缘无故开始触发 UAC 提升提示。

    requestedExecutionLevel 还告诉系统不要虚拟化对受保护资源的访问。

    2。 WinVista 和 Win7 的最小清单中需要哪些信息?

    至少是 requestedExecutionLevel,以便 UAC 规范地知道您是否需要提升,并且不虚拟化对 Program Files 或 HKLM 的访问。

    3。 Windows 7下错误的manifest资源会触发Program Compatibility Assistant吗?

    使用清单,Windows vista 和 7 会认为您是一个“现代”应用程序,只是被破坏了。程序兼容性助手逻辑是为遗留应用程序保留的 - 即没有清单的应用程序或具有仅 XP 条目的清单的应用程序(即缺少 requestedExecutionLevel )。

    4. DLL 是否需要清单资源?

    从 Windows 7 开始,仅当 Dll 使用它来绑定到并行程序集时。 MSDev Studio 在带有 requestedExecutionLevel 元素的 Dll 中创建清单,但这实际上会产生在某些情况下无法成功加载的无效 Dll。

    5.我在哪里可以获得有关使用清单的信息?

    在 MSDN 上:Isolated Applications and Side By Side Assemblies 是我所知道的唯一官方参考资料,它甚至试图描述清单架构以及如何使用它们。


    总结一下:如果您正在 Vista 或 Windows 7 上开发 - 并且可能已经测试了您的应用程序行为,那么最好包含一个清单以避免您的应用程序被视为旧版应用程序。

    【讨论】:

      【解决方案2】:

      您可能需要清单的几个原因。首先,您需要告诉 Windows 您的程序知道 UAC 策略。这需要一个包含 <requestedExecutionLevel> 元素的清单。如果缺少,Windows 会将您的程序视为遗留程序,并将不安全的访问重定向到注册表和文件系统。对特权注册表项的写入被重定向到 HKCU。对特权目录的文件写入被重定向到隔离存储。

      如果您的程序使用存储在 Windows 并行缓存中的 DLL,您将需要清单。如果您仍然使用 VS6,这种情况就不太可能发生。 WinSxS 用于 VS2005 和 VS2008 程序的 MFC 和 CRT 库。但不是 VS2010,这是 MSFT 客户的普遍需求。

      如果您想为您的应用程序启用视觉主题,您将需要一个清单。需要从 comctl32.dll 版本 6.0 加载现代版本的通用控件,存储在并行缓存中,而不是存储在 system32 中的旧版本中。

      如果您使用无注册表 COM,则需要一个清单,清单条目会替换通常写入注册表的内容,从而允许本地部署进程内 COM 服务器。

      其中大部分在现代版本的 Visual Studio 中是自动化的。

      【讨论】:

        猜你喜欢
        • 2023-03-14
        • 1970-01-01
        • 2010-09-12
        • 1970-01-01
        • 2022-10-17
        • 1970-01-01
        • 2011-02-21
        • 2010-12-12
        • 1970-01-01
        相关资源
        最近更新 更多