作法:設定 .NET Framework 架構 COM 元件進行免註冊啟用
.NET Framework 型元件的免註冊啟用,只比 COM 元件的免註冊啟用略為複雜。 安裝程式需要兩個資訊清單:
COM 應用程式必須有 Win32 樣式應用程式資訊清單,才能識別 Managed 元件。
.NET Framework 元件必須具有執行階段所需啟用資訊的元件資訊清單。
本主題描述如何建立應用程式資訊清單與應用程式的關聯、建立元件資訊清單與元件的關聯,以及將元件資訊清單內嵌在組件中。
建立應用程式資訊清單
使用 XML 編輯器,建立 (或修改) COM 應用程式所擁有的應用程式資訊清單,而其與一或多個 Managed 元件交互操作。
在檔案開頭,插入下列標準標頭:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> </assembly>
如需資訊清單元素及其屬性的相關資訊,請參閱應用程式資訊清單 \(英文\)。
識別資訊清單的擁有者。 在下列範例中,
myComApp
第 1 版擁有資訊清單檔。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="msil" /> </assembly>
識別相依組件。 在下列範例中,
myComApp
取決於myManagedComp
。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" publicKeyToken="8275b28176rcbbef" /> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="myOrganization.myDivision.myManagedComp" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="8275b28176rcbbef" /> </dependentAssembly> </dependency> </assembly>
儲存並命名資訊清單檔。 應用程式資訊清單的名稱就是後接 .manifest 副檔名的組件可執行檔名稱。 例如,myComApp.exe 的應用程式資訊清單檔案名稱是 myComApp.exe.manifest。
您可以在與 COM 應用程式相同的目錄中安裝應用程式資訊清單。 或者,您可以將它當成資源新增至應用程式的.exe 檔案。 如需詳細資訊,請參閱 關於並存組件。
建立元件資訊清單
使用 XML 編輯器,建立元件資訊清單以描述 Managed 組件。
在檔案開頭,插入下列標準標頭:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> </assembly>
識別檔案的擁有者。 應用程式資訊清單檔中
<dependentAssembly>
項目的<assemblyIdentity>
項目必須符合元件資訊清單中的項目。 在下列範例中,myManagedComp
版本 1.2.3.4 擁有資訊清單檔。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" publicKeyToken="8275b28176rcbbef" processorArchitecture="msil" /> </assembly>
識別組件中的每個類別。 使用
<clrClass>
項目,唯一識別 Managed 組件中的每個類別。 項目 (即<assembly>
項目的子項目) 具有下表所述的屬性。屬性 描述 必要 clsid
指定要啟用之類別的識別碼。 Yes description
通知使用者有關元件的字串。 空字串為預設值。 No name
代表 Managed 類別的字串。 Yes progid
要用於晚期繫結啟用的識別碼。 No threadingModel
COM 執行緒模型。 「兩者」都是預設值。 No runtimeVersion
指定要使用的 Common Language Runtime (CLR) 版本。 如果您未指定此屬性,而且尚未載入 CLR,則會載入具有 CLR 第 4 版前之最新已安裝 CLR 的元件。 如果您指定 v1.0.3705、v1.1.4322 或 v2.0.50727,版本會自動向前復原至 CLR 版本 4 之前的最新已安裝 CLR 版本 (通常是 v2.0.50727)。 如果已載入另一個版本的 CLR,並且可以透過並存同處理序方式載入指定的版本,則會載入指定的版本;否則,會使用載入的 CLR。 這可能會造成載入失敗。 No tlbid
包含類別類型資訊的類型程式庫識別項。 No 所有屬性標記都會區分大小寫。 您可以使用 OLE/COM ObjectViewer (Oleview.exe) 檢視針對組件所匯出的型別程式庫,以取得 CLSID、ProgID、執行緒模型和執行階段版本。
下列元件資訊清單識別兩個類別:
testClass1
和testClass2
。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" publicKeyToken="8275b28176rcbbef" /> <clrClass clsid="{65722BE6-3449-4628-ABD3-74B6864F9739}" progid="myManagedComp.testClass1" threadingModel="Both" name="myManagedComp.testClass1" runtimeVersion="v1.0.3705"> </clrClass> <clrClass clsid="{367221D6-3559-3328-ABD3-45B6825F9732}" progid="myManagedComp.testClass2" threadingModel="Both" name="myManagedComp.testClass2" runtimeVersion="v1.0.3705"> </clrClass> <file name="MyManagedComp.dll"> </file> </assembly>
儲存並命名資訊清單檔。 元件資訊清單的名稱就是後接 .manifest 副檔名的組件庫名稱。 例如,myManagedComp.dll 是 myManagedComp.manifest。
您必須將元件資訊清單內嵌為組件中的資源。
將元件資訊清單內嵌至 Managed 組件
建立包含下列陳述式的資源指令碼:
1 RT_MANIFEST myManagedComp.manifest
在此陳述式中,
myManagedComp.manifest
是所內嵌之元件資訊清單的名稱。 在此範例中,指令碼檔名稱是myresource.rc
。使用 Microsoft Windows 資源編譯器 (Rc.exe) 編譯指令碼。 在命令提示字元中,輸入下列命令:
rc myresource.rc
Rc.exe 會產生
myresource.res
資源檔。重新編譯組件的原始程式檔,然後使用 /win32res 選項來指定資源檔:
/win32res:myresource.res
同樣地,
myresource.res
是包含內嵌資源的資源檔名稱。