关于.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值有一个发生变化,则会重新查找一次当前目录是否存在清单文件.

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

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

 

posted @ 2016-09-09 17:59  s324  阅读(435)  评论(0编辑  收藏  举报