关于.net 对.manifest清单文件查找缓存的猜想

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于.net 对.manifest清单文件查找缓存的猜想相关的知识,希望对你有一定的参考价值。

问题背景:

 winform调用unity web player 插件.

 按如下操作:

技术分享

 ,编译后会生成.manifest清单文件:

技术分享

通过清单内容可以看出程序在运行时是按照以上信息来查找ActiveX控件的.当吧.manifest文件删除到回收站,运行程序会报以下错误:

"没有注册类(异常来自 HRESULT:0x80040154(REGDB_E_CLASSNOTREG))"

 说明了对清单文件(A.exe.manifest)的依赖,然后我们再把清单文件从回收站还原.发现依然报同样的错.但这个时候如果用新编译的A.exe文件替换后即可正常运行.(只是重新编译了下没做修改,但A.exe文件的MD5值变了)

后来经过几次测试发现:在还原A.exe.manifest文件后如果不用新编译的A.exe文件替换,而修改下程序所在路径也可以正常运行.

所以我猜想系统应该会对清单文件的查找结果进行缓存记录,并且记录了执行文件所在路径、MD5值 和是否存在清单文件(true/false).如果 路径信息或可执行文件的MD5值有一个发生变化,则会重新查找一次当前目录是否存在清单文件.

一旦记录了不存在则下一次便不会在当前路径查找.

有知道原理的朋友欢迎指正.

 

以上是关于关于.net 对.manifest清单文件查找缓存的猜想的主要内容,如果未能解决你的问题,请参考以下文章

加载缓存清单文件

关于 manifest.xml 文件的开放文档规范

HTML5 缓存清单和内容类型

h5-应用级缓存

为免注册 COM 生成清单文件

我自己的(本机)DLL 的清单