元件資訊清單
元件資訊清單是描述並存元件的 XML 檔案。 元件資訊清單描述元件的名稱和版本、元件之檔案和資源,以及元件在其他並存元件上的相依性。 正確的安裝、啟用和執行並存元件需要元件資訊清單一律隨附系統上的元件。
如需 XML 架構的完整清單,請參閱 資訊清單檔架構。
元件資訊清單具有下列元素和屬性。
項目 | 屬性 | 必要 |
---|---|---|
裝配 | 是 | |
manifestVersion | 是 | |
noInheritable | 否 | |
assemblyIdentity | 是 | |
type | 是 | |
name | Yes | |
language | 否 | |
processorArchitecture | 否 | |
version | 是 | |
publicKeyToken | 否 | |
依賴 | 否 | |
dependentAssembly | 否 | |
file | 否 | |
name | Yes | |
hashalg | 否 | |
hash | 否 | |
comClass | 否 | |
description | 否 | |
Clsid | 是 | |
threadingModel | 否 | |
tlbid | 否 | |
progid | 否 | |
miscStatus | 否 | |
miscStatusIcon | 否 | |
miscStatusContent | 否 | |
miscStatusDocPrint | 否 | |
miscStatusThumbnail | 否 | |
typelib | 否 | |
tlbid | 是 | |
version | 是 | |
helpdir | 是 | |
resourceid | 否 | |
flags | 否 | |
comInterfaceExternalProxyStub | 否 | |
Iid | 是 | |
baseInterface | 否 | |
numMethods | 否 | |
name | 否 | |
tlbid | 否 | |
proxyStubClsid32 | 否 | |
comInterfaceProxyStub | 否 | |
Iid | 是 | |
name | Yes | |
tlbid | 否 | |
baseInterface | 否 | |
numMethods | 否 | |
proxyStubClsid32 | 否 | |
threadingModel | 否 | |
windowClass | 否 | |
版本 | 否 |
檔案位置
元件資訊清單可以安裝在三個位置:
- 做為隨附 共用元件的資訊清單,元件資訊清單應該安裝為並存組件快取中的個別檔案。 這通常是 Windows 目錄中的 WinSxS 資料夾。
- 作為隨附 私用元件的資訊清單,元件資訊清單應該安裝在應用程式的目錄結構中。 這通常是與應用程式可執行檔位於相同資料夾中的個別檔案。
- 做為 DLL 中的資源,元件可用於 DLL 的私人使用。 元件資訊清單不能包含在 EXE 中作為資源。 EXE 檔案可能包含 應用程式資訊清單 作為資源。
檔名語法
元件資訊清單的名稱是任何有效的檔案名, .manifest
後面接著 。
例如,參考 myassembly 的元件資訊清單會使用下列檔案名語法: myassembly.<resource ID>.manifest
。
如果元件資訊清單是安裝為個別檔案,或資源識別碼為 1,您可以省略 <resource ID>
欄位。
注意
由於並行搜尋私人元件的方式,將 DLL 封裝為私用元件時,會套用下列命名限制。 建議的做法是將元件資訊清單放在 DLL 中作為資源。 在此情況下,資源識別碼必須等於 1,而且私用元件的名稱可能與 DLL 的名稱相同。 例如,如果 DLL 的名稱是Microsoft.Windows.mysample.dll,資訊清單 之 assemblyIdentity 元素中使用的 name 屬性值也可能是 Microsoft.Windows.mysample。 替代方式是將元件資訊清單放在個別的檔案中。 在此情況下,元件及其資訊清單的名稱必須與 DLL 的名稱不同。 例如,Microsoft.Windows.mysampleAsm、Microsoft.Windows.mysampleAsm.manifest 和 Microsoft.Windows.Mysample.dll。 如需如何並存搜尋私人元件的詳細資訊,請參閱 元件搜尋順序。
元素
專案和屬性的名稱會區分大小寫。 元素和屬性的值不區分大小寫,但類型屬性的值除外。
-
裝配
-
容器專案。 其第一個子項目必須是 assemblyIdentity 或 noInheritable 元素。 元件資訊清單會唯一描述 assemblyIdentity所識別的並存元件。 必要。
元件元素必須位於命名空間 「urn:schemas-microsoft-com:asm.v1」。 元件的子項目也必須在這個命名空間中,藉由繼承或標記。
元件專案具有下列屬性。
屬性 Description manifestVersion manifestVersion屬性必須設定為 1.0。 -
noInheritable
-
在元件資訊清單中包含這個專案,以指出元件會管理 啟用內容 及其物件。 noInheritable元素必須是元件專案的子元素。 assemblyIdentity元素應該位於任何 noInheritable元素之後。 如果包含 noInherit 元素的任何應用程式資訊清單使用元件,則元件資訊清單中需要noInheritable元素。 應用程式資訊清單中的 noInheritable 元素沒有任何作用。 noInheritable元素沒有子專案。
-
assemblyIdentity
-
描述並唯一識別並存元件。
作為 元件 專案的第一個子項目, assemblyIdentity 會描述並唯一識別擁有此元件資訊清單的並存元件。 這稱為元件資訊清單的 DEF 內容 assemblyIdentity 。
做為 dependentAssembly 元素的第一個子項目, assemblyIdentity 會描述並唯一識別 DEF 內容 assemblyIdentity所使用的並存元件。 這稱為元件資訊清單的 REF 內容 assemblyIdentity 。 DEF 內容元件需要 REF 內容元件才能正常運作。 請注意,每個 REF 內容 assemblyIdentity 必須完全符合所參考元件本身元件資訊清單中對應的 DEF 內容 assemblyIdentity 。
這個專案沒有子項目。 assemblyIdentity元素確實具有下列屬性。
屬性 描述 type 指定元件類型。 此值必須是 win32,且大小寫為 。 必要。 name 唯一命名元件。 針對元件名稱使用下列格式:Organization.Division.Name。 例如,Microsoft.Windows.mysampleAsm。 必要。 請注意,如果是封裝為具有個別資訊清單檔之私用元件的 DLL,元件的名稱必須與 DLL 和資訊清單的名稱不同。 language 識別元件的語言。 選擇性。 如果元件是特定語言的,請指定 DHTML 語言代碼。 在供全球使用之元件資訊清單的 DEF 內容 assemblyIdentity 中, (語言中性) 省略語言屬性。
在供全球使用之元件資訊清單的 REF 內容 assemblyIdentity 中, (語言中性) 將語言的值設定為 「*」。processorArchitecture 指定處理器。 有效值為 32 位 Windows 的 x86,而 64 位 Windows 則為 ia64。 選擇性。 version 指定組件版本。 使用四部分版本格式:mmmmm.nnnnn.ooooo.ppppp。 以句點分隔的每個部分都可以包含 0-65535。 如需詳細資訊,請參閱 元件版本。 必要。 publicKeyToken 16 個字元的十六進位字串,代表元件簽署所在公開金鑰 SHA-1 雜湊的最後 8 個位元組。 用來簽署目錄的公開金鑰必須是 2048 位或更新版本。 共用並存元件的必要專案。 -
依賴
-
包含至少一個 dependentAssembly的容器專案。 第一個子項目必須是 dependentAssembly 元素。 相 依性 沒有屬性。 選擇性。
-
dependentAssembly
-
第一個子項目必須是 assemblyIdentity 元素,可描述並唯一識別擁有此元件資訊清單的並存元件所使用的並存元件。 每個 dependentAssembly 必須只位於一個 相依性內。 選擇性。
-
檔
-
包含並存元件所使用的檔案。 包含 comClass、 typelib、 windowClass、 comInterfaceProxyStub 子項目。 選擇性。
file元素具有下列屬性。
屬性 描述 name 例如,檔案的名稱Conctl32.dll。 hashalg 用來建立檔案雜湊的演算法。 此值應該是 SHA1。 hash 依名稱參考之檔案的雜湊。 視雜湊演算法而定,長度為十六進位的字串。 -
comClass
-
檔案專案的子項目。 選擇性。
comClass元素具有下列屬性。
屬性 Description description 類別名稱。 Clsid 可唯一識別類別的 GUID。 必要。 值的格式必須是有效的 GUID。 threadingModel 進程 COM 類別所使用的執行緒模型。 如果此屬性為 null,則不會使用執行緒模型。 元件會在用戶端的主執行緒上建立,而來自其他執行緒的呼叫會封送處理至此執行緒。 選擇性。 有效值為:「Apartment」、「Free」、「Both」 和 「Neutral」。 tlbid 這個 COM 元件之型別程式庫的 GUID。 值的格式必須是 GUID。 選擇性。 progid 與 COM 元件相關聯的版本相依程式設計識別碼。 ProgID 的格式為 <廠商> 。 <component> 。 <version> 。 miscStatus 元件資訊清單中的重複專案是 MiscStatus 登錄機碼所提供的資訊。 如果找不到 miscStatusIcon、 miscStatusContent、 miscStatusDocprint或 miscStatusThumbnail 屬性的值,則會針對遺漏的屬性使用 miscStatus 中列出的對應預設值。 此值可以是下表中屬性值的逗號分隔清單。 如果 COM 類別是需要 Miscstatus 登錄機碼值的 OCX 類別,您可以使用此屬性。 miscStatusIcon 元件中的重複專案會以DVASPECT_ICON提供的資訊來資訊清單。 它可以提供物件的圖示。 此值可以是下表中屬性值的逗號分隔清單。 如果 COM 類別是需要 Miscstatus 登錄機碼值的 OCX 類別,您可以使用此屬性。 miscStatusContent 元件中的重複專案會以DVASPECT_CONTENT提供的資訊來資訊清單。 它可以為螢幕或印表機提供可顯示的複合檔案。 此值可以是下表中屬性值的逗號分隔清單。 如果 COM 類別是需要 Miscstatus 登錄機碼值的 OCX 類別,您可以使用此屬性。 miscStatusDocprint 元件資訊清單中DVASPECT_DOCPRINT所提供的資訊重複。 它可以提供可在螢幕上顯示的物件標記法,就像列印到印表機一樣。 此值可以是下表中屬性值的逗號分隔清單。 如果 COM 類別是需要 Miscstatus 登錄機碼值的 OCX 類別,您可以使用此屬性。 miscStatusThumbnail 元件資訊清單中DVASPECT_THUMBNAIL提供的資訊重複。 它可以提供可在流覽工具中顯示的物件縮圖。 此值可以是下表中屬性值的逗號分隔清單。 如果 COM 類別是需要 Miscstatus 登錄機碼值的 OCX 類別,您可以使用此屬性。 comClass元素可以有 < progid > ... 元素做為子系,其中列出版本相依程式。
下列範例顯示包含在檔案元素中的comClass元素。
<file name="sampleu.dll"> <comClass description="Font Property Page" clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}" threadingModel = "Both" tlbid = "{44EC0535-400F-11D0-9DCD-00A0C90391D3}"/> <comClass description="Color Property Page" clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}" progid="ABC.Registrar"/> </file>
如果您的 COM 類別是需要 MiscStatus 登錄子機碼的 OCX 類別,以指定如何建立及顯示物件,您可以在元件資訊清單中複製此資訊來啟用物件。 使用comClass元素的miscStatus、miscStatusIcon、miscStatusContent、miscStatusDocprint和miscStatusThumbnail屬性來指定物件的特性。 將這些屬性設定為下表中屬性值的逗號分隔清單。 這些屬性會複製 DVASPECT 列舉所提供的資訊。 如果找不到 miscStatusIcon、 miscStatusContent、 miscStatusDocprint或 miscStatusThumbnail的值,則會使用 miscStatus 中指定的預設值。 使用下表中的屬性值。 這些會對應至 OLEMISC 列舉的位旗標。
屬性值 OLEMISC 常數 recomposeonresize OLEMISC_RECOMPOSEONRESIZE onlyiconic OLEMISC_ONLYICONIC insertnotreplace OLEMISC_INSERTNOTREPLACE static OLEMISC_STATIC cantlinkinside OLEMISC_CANTLINKINSIDE canlinkbyole1 OLEMISC_CANLINKBYOLE1 islinkobject OLEMISC_ISLINKOBJECT insideout OLEMISC_INSIDEOUT activatewhenvisible OLEMISC_ACTI加值稅EWHENVISIBLE renderingisdeviceindependent OLEMISC_RENDERINGISDEVICEINDEPENDENT invisibleatruntime OLEMISC_INVISIBLEATRUNTIME alwaysrun OLEMISC_ALWAYSRUN actslikebutton OLEMISC_ACTSLIKEBUTTON actslikelabel OLEMISC_ACTSLIKELABEL nouiactivate OLEMISC_NOUIACTI加值稅E 可對齊 OLEMISC_ALIGNABLE simpleframe OLEMISC_SIMPLEFRAME setclientsitefirst OLEMISC_SETCLIENTSITEFIRST imemode TOLEMISC_IMEMODE ignoreativatewhenvisible OLEMISC_IGNOREACTI加值稅EWHENVISIBLE wantstomenumerge OLEMISC_WANTSTOMENUMERGE supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO -
typelib
-
檔案專案的子項目。 選擇性。
typelib元素具有下表所示的屬性。
屬性 Description tlbid 類型程式庫的唯一 ID。 必要。 version 類型程式庫的兩部分版本號碼。 如果只有次要版本號碼增加,則會以相容的方式支援先前類型程式庫的所有功能。 如果主要版本號碼變更,則必須重新編譯針對型別程式庫編譯的程式碼。 類型程式庫的版本號碼可能與應用程式的版本號碼不同。 必要。 helpdir 類型程式庫中類型說明檔所在的目錄。 如果應用程式支援多種語言的類型程式庫,程式庫可能會參考 [說明檔] 目錄中的不同檔案名。 如果沒有值,請指定 「」。 必要。 resourceid 地區設定識別碼的十六進位字串表示 (LCID) 。 它是沒有 0x 前置詞且沒有前置零的十六進位數位。 LCID 可能有中性子語言識別項。 如需詳細資訊,請參閱 地區設定識別碼。 選擇性。 flags 這個類型程式庫之類型程式庫旗標的字串表示。 具體而言,它應該是 「RESTRICTED」、「CONTROL」、「HIDDEN」 和 「HASDISKIMAGE」 的其中一個。 這些是LIBFLAGS列舉的值,而且是在ICreateTypeLib::SetLibFlags方法的uLibFlags參數中指定的相同旗標。 選擇性。 下列範例顯示file 元素中包含的typelib元素。
<file name="sampleu.dll"> <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}" version="1.0" helpdir=""/> </file>
-
comInterfaceExternalProxyStub
-
comInterfaceExternalProxyStub是元件專案的子項目,用於自動化介面。 例如 ,IDispatch 及其衍生介面。 選擇性。
預設 Proxy 存根實作適用于大部分的自動化介面,例如衍生自 IDispatch的介面。 介面 Proxy 存根和所有其他外部 Proxy 存根介面實作都必須列在 comInterfaceExternalProxyStub中。 comInterfaceExternalProxyStub元素具有下表所示的屬性。
屬性 Description Iid 正在宣告 Proxy 之介面的 IID。 必要。 此值的格式應該是:「{iid}」。 baseInterface 從中衍生 iid 屬性所描述之介面的 IID 。 此屬性是選擇性的。 此值的格式應該是:「{iid}」。 numMethods 介面所實作的方法數目。 此屬性是選擇性的。 此值的格式應該是:「n」。 name 介面的名稱,如同它出現在程式碼中一樣。 例如,「IViewObject」。 這不應該是描述性字串。 此屬性是選擇性的。 此值的格式應該是:「name」。 tlbid 包含 iid 屬性所指定介面描述的類型程式庫。 此屬性是選擇性的。 此值的格式應該是:「{tlbid}」 。 proxyStubClsid32 將 IID 對應至 32 位 Proxy DLL 中的 CLSID。 下列範例顯示 comInterfaceExternalProxyStub 元素。
<comInterfaceExternalProxyStub name="IAxWinAmbientDispatch" iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" numMethods="35" baseInterface="{00000000-0000-0000-C000-000000000046}"/>
-
comInterfaceProxyStub
-
檔案專案的子項目。 選擇性。
如果元件中的檔案實作 Proxy 存根,對應的檔案卷標必須包含 comInterfaceProxyStub 子項目,且屬性與 comInterfaceProxyStub 元素相同。 如果您省略元件的某些 comInterfaceProxyStub 相依性,進程和執行緒之間的封送處理介面可能無法如預期般運作。
comInterfaceProxyStub元素具有下列屬性。
屬性 Description Iid 。正在宣告 Proxy 之介面的 IID。 必要。 此值的格式應該是:「{iid}」。 name 介面的名稱,如程式碼所示。 例如,「IViewObject」。 這不應該是描述性的字串。 此屬性是選擇性的。 此值的格式應該是:「name」。 tlbid 類型程式庫,其中包含 iid 屬性所指定的介面描述。 此屬性是選擇性的。 此值的格式應該是:「{tlbid}」。 baseInterface 衍生 iid 屬性所描述之介面的 IID 。 此屬性是選擇性的。 此值的格式應該是:「{iid}」。 numMethods 介面所實作的方法數目。 此屬性是選擇性的。 此值的格式應該是:「n」。 proxyStubClsid32 將 IID 對應至 32 位 Proxy DLL 中的 CLSID。 threadingModel 進程 COM 類別所使用的執行緒模型。 如果此屬性為 null,則不會使用任何執行緒模型。 元件會在用戶端的主執行緒上建立,而來自其他執行緒的呼叫會封送處理至此執行緒。 選擇性。 有效值為:「Apartment」、「Free」、「Both」 和 「Neutral」。 -
windowclass
-
要設定版本的 Windows 類別名稱。 windowclass元素具有下列屬性。
屬性 Description 版本 這個屬性會控制註冊中使用的內部視窗類別名稱是否包含包含視窗類別的元件版本。 此屬性的值可以是 「yes」 或 「no」。 預設值為 「yes」。 只有當同一個視窗類別是由並存元件和相等的非並存元件定義,而且您想要將它們視為相同的視窗類別時,才應該使用 「no」 值。 請注意,有關視窗類別註冊的一般規則只會套用註冊視窗類別的第一個元件,因為它未設定版本。 下列範例顯示包含在檔案元素中的windowclass元素。
<file name="comctl32.dll"> <windowClass versioned="no">ToolbarWindow32</windowClass> </file>
範例
以下是元件資訊清單的範例。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity type="win32" name="Microsoft.Tools.SampleAssembly" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="0000000000000000"/>
<file name="sampleu.dll" hash="3eab067f82504bf271ed38112a4ccdf46094eb5a" hashalg="SHA1">
<comClass description="Font Property Page" clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"/>
<comClass description="Color Property Page" clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}"/>
<comClass description="Picture Property Page" clsid="{0BE35202-8F91-11CE-9DE3-00AA004BB851}"/>
</file>
<file name="bar.dll" hash="ac72753e5bb20446d88a48c8f0aaae769a962338" hashalg="SHA1"/>
<file name="foo.dll" hash="a7312a1f6cfb46433001e0540458de60adcd5ec5" hashalg="SHA1">
<comClass description="Registrar Class" clsid="{44EC053A-400F-11D0-9DCD-00A0C90391D3}" progid="ATL.Registrar"/>
<comInterfaceProxyStub iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" name=" IAxWinAmbientDispatch " tlbid="{34EC053A-400F-11D0-9DCD-00A0C90391D3}"/>
<typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}" version="1.0" helpdir=""/>
</file>
<file name="sampledll.dll" hash="ba62960ceb15073d2598379307aad84f3a73dfcb" hashalg="SHA1"/>
<windowClass>ToolbarWindow32</windowClass>
<windowClass>ComboBoxEx32</windowClass>
<windowClass>sample_trackbar32</windowClass>
<windowClass>sample_updown32</windowClass>
</assembly>