【问题标题】:Diagnosing Windows application manifests诊断 Windows 应用程序清单
【发布时间】:2010-10-19 00:13:30
【问题描述】:

Windows 应用程序清单的语法非常松散——无法识别的部分会被忽略。如何诊断哪些部分被识别,哪些未被识别?

导致此问题的问题在于应用程序具有并行 UAC 清单,并指定了 requestedExecutionLevelhighestAvailable。这应该关闭 Vista 文件虚拟化,但事实并非如此。我想知道为什么。清单正在使用中,因为我通过故意引入语法错误进行检查,但我看不出有什么方法可以确定它是如何使用的。

【问题讨论】:

    标签: windows windows-vista uac manifest


    【解决方案1】:

    我有类似的问题:任务管理器显示虚拟化已启用 尽管应用程序显示为highestAvailable,但仍在运行应用程序。我尝试使用 mt.exe 来显示我的文件。它对一些人有效,但对另一些人无效。这种奇怪的行为让我认为 Vista 中有一些持久缓存会根据 exe 的时间戳影响 UAC 信息。解决方案是使用来自Resource Tuner 的清单向导。

    【讨论】:

    • 您的评估是正确的。有两个缓存。第一个,基于可执行文件的时间戳,确定 Windows 是否应该检查清单是否存在(即,如果您添加清单,则更新 exe 时间戳)。第二个是清单的内容,关闭清单的时间戳(如果它是嵌入的,可能与 exe 相同)
    【解决方案2】:

    查看我对 Wylder 的评论 - 您是否尝试过更新可执行文件和清单的时间戳?
    从提升的命令提示符运行“sxstrace”会返回什么?
    您可以在某处发布您的清单吗?

    【讨论】:

    • sxstrace 实用程序、关于不知道 asm.v3 的 mt.exe 的详细信息以及缓存的详细信息对我来说是新的。我可以自己解决的具体问题。无论如何,这并不紧急。谢谢。
    【解决方案3】:

    有一个缓存。

    SxS 激活上下文缓存缓存 .manifest 文件。

    据我所知,它只缓存了清单的存在。

    它是基于内存的,仅在重新启动时才会清除 - 但是,我知道事实上它并不总是在重新启动时清除,并且许多其他人也报告了这一点。我确实找到了 c:\windows\sxs\manifestCache 并想知道它是否真的在重新启动时从那里重新加载。

    强制的唯一方法是更改​​.exe上的修改日期。

    在编辑清单时也要小心,如果你不提升你的编辑器,它将被 UAC 虚拟化 - 当然,加载器会忽略虚拟化副本。

    参考资料:

    【讨论】:

      【解决方案4】:

      我会检查documentation 以确保它符合规范,但除此之外,据我所知,没有自动化工具可以做同样的事情。

      【讨论】:

      • 谢谢。我通读了 MSDN 文章以及“Windows Vista Developer Story”文档。我想,最让我困扰的是,应用程序中有一个相当重要的部分是人工可编辑的,但似乎无法调试。
      • 很不幸,但您最好的希望是第三方语法检查器(它会有自己的解析错误)
      • 问题中提到了具体问题,但它不是主要兴趣点。 :)
      • mt.exe 可以验证清单的语法。不幸的是,它不验证与 UAC 相关的清单的特定部分,因为它不理解 asm.v3 命名空间。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      相关资源
      最近更新 更多