Madifest是個(gè)XML的描述文件,對(duì)于每個(gè)DLL有DLL的Manifest文件,對(duì)于每個(gè)應(yīng)用程序Application也有自己的Manifest。對(duì)于應(yīng)用程序而言,Manifest可以是一個(gè)和exe文件同一目錄下的.manifest文件,也可以是作為一個(gè)資源嵌入在exe文件內(nèi)部的(Embed Manifest)。

XP以前版本的windows,會(huì)像以前那樣執(zhí)行這個(gè)exe文件,尋找相應(yīng)的dll,沒有分別Manifest只是個(gè)多余的文件或資源,dll文件會(huì)直接到system32的目錄下查找,并且調(diào)用。這樣,如果公共DLL升級(jí),將會(huì)導(dǎo)致之前安裝的應(yīng)用程序不能使用,這就是“DLL Hell”的來源。為了解決這個(gè)問題,.NET開發(fā)提出了side-by-by的開發(fā)方法,來避免這個(gè)問題。主要方法,就是通過Manifest文件來查找相應(yīng)的DLL。XP及以后的系統(tǒng)都集成了這樣一種查找DLL的方法。

提取Manifest

默認(rèn)Manifest文件都是內(nèi)嵌在exe/dll中的,如果需要查看。VS提供mt.exe工具來從exe/dll中提取Manifest文件。

mt.exe -inputresource:d:\test.exe -out:d:\test.manifest

 

的Manifest文件有關(guān)設(shè)置

我們編譯MFC工程時(shí),會(huì)在stdafx.h文件里看到下列代碼。

  • 網(wǎng)友評(píng)論