诊断 Windows 应用程序清单
Windows 应用程序清单的语法非常宽松 - 无法识别的部分将被忽略。 如何判断哪些部分被识别,哪些部分未被识别?
导致此问题的问题在于应用程序具有并行 UAC 清单,并且指定了 requestedExecutionLevel 为 highestAvailable。 这应该会关闭 Vista 文件虚拟化,但事实并非如此。 我想找出原因。 正如我通过故意引入语法错误所检查的那样,清单正在被使用,但我看不到如何确定它是如何使用的。
Windows application manifests have a very loose grammar — unrecognized parts are ignored. How can I diagnose which parts are recognized and which are not?
The problem leading to this question is with an application that has a side-by-side UAC manifest with a requestedExecutionLevel of highestAvailable specified. This should switch Vista file virtualization off, but it does not. I want to find out why. The manifest is being used, as I checked by intentionally introducing a syntactic error, but I see no way of determining how it is being used.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
有缓存。
SxS 激活上下文缓存缓存 .manifest 文件。
据我所知,它应该只缓存清单的存在。
它是基于内存的,仅在重新启动时清除 - 然而,我知道事实上它并不总是在重新启动时清除,许多其他人也报告了这一点。 我确实找到了 c:\windows\sxs\manifestCache 并想知道它是否真的在重新启动时从那里重新加载。
唯一的强制方法是更改 .exe 上的修改日期。
编辑清单时还要小心,如果不提升编辑器,它将被 UAC 虚拟化 - 当然,虚拟化副本会被加载程序忽略。
参考文献:
There is a cache.
The SxS Activation Context Cache caches .manifest files.
From what I've read it supposedly only caches the existence of a manifest.
It is memory based and clears only on a reboot - HOWEVER, I know for fact it does not always clear on a reboot and many others report this as well. I did find c:\windows\sxs\manifestCache and wonder if it really reloads from there on reboot.
The only way to force is to change the modified date on the .exe.
Also becareful when editing your manifest, if you don't elevate your editor, it will be UAC virtualized - of coures the virtualized copy is ignored by the loader.
References:
请参阅我对 Wylder 的评论 - 您是否尝试过更新可执行文件和可执行文件的时间戳? 显现?
从提升的命令提示符运行“sxstrace”会返回什么?
你能把你的清单贴在某个地方吗?
See my comment to Wylder - have you tried to update the timestamp of executable & manifest?
What does "sxstrace" run from an elevated command prompt return?
Could you post your manifest somewhere?
我遇到了类似的问题:任务管理器显示虚拟化已启用
尽管应用程序显示为最高可用,但仍在运行应用程序。 我尝试使用 mt.exe 来显示我的文件。 它对某些人有效,但对另一些人无效。 这种奇怪的行为让我认为 Vista 中存在一些持久缓存,会影响基于 exe 时间戳的 UAC 信息。 解决方案是使用 资源调谐器 中的清单向导。
I had the similar problem: the task manager showed Virtualization was enabled for the
running apps despite the apps being manifested as highestAvailable. I tried using mt.exe to manifest my files. It worked on some but not on others. That strange behavior made me think there was some persistent cache in Vista that affected UAC info based on an exe's timestamp. The solution was to use the manifest wizard from Resource Tuner.
我会仔细查看文档以确保它符合规范,但除此之外,据我所知,还没有一个自动化工具可以做同样的事情。
I would review through the documentation to ensure that it conforms to spec, but other than that there isn't an automated tool to do the same thing as far as I am aware.