DOC: 全域組件快取 (GAC) API 所未記載在.NET Framework 軟體開發套件 (SDK) 文件中

文章翻譯 文章翻譯
文章編號: 317540 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

.NET Framework 軟體開發套件 (SDK) 說明文件中未記載在原生程式碼的應用程式發展介面 (API),可讓您進行互動與全域組件快取 (GAC)。

其他相關資訊

警告: 待辦不使用這些 API 應用程式中來執行組件繫結或測試的組件,或其他執行的階段、 開發或設計階段作業是否存在。只有 [系統管理工具] 及 [安裝程式必須使用這些 API。如果您使用 [GAC 這直接公開您的應用程式組件繫結 fragility 或可能會導致您的應用程式在未來版本的.NET Framework 上正確運作。

GAC 會儲存在電腦上的所有應用程式間共用的組件。實際儲存位置和結構的 GAC 不記錄,而且會在未來版本的.NET Framework 和 Microsoft Windows 作業系統中的變更。

要存取組件在 GAC 中唯一支援的方法就是透過本文中所記載的 API。

大部分的應用程式並沒有使用這些 API,因為組件繫結由通用語言執行階段會自動執行。自訂安裝程式或管理工具必須使用這些 API。Microsoft Windows 安裝程式沒有安裝到 GAC 的組件的原生支援。

更多有關組件與 GAC,請參閱.NET Framework SDK。

在下列案例中使用 GAC API:
  • 當您將組件安裝至 GAC。
  • 當您從 GAC 移除組件時。
  • 當您的組件從匯出 GAC。
  • 當您列舉在 GAC 中可用的組件。
注意: 使用任何函式和這個規格中所描述的介面之前,必須在呼叫 CoInitialize(Ex)

IAssemblyCache 介面

IAssemblyCache 介面是最上層到 GAC 提供存取的介面。

若要取得 CreateAssemblyCache API 的執行個體,呼叫 CreateAssemblyCache API,如下所示:
STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); 
的參數定義如下:
  • ppAsmCache-傳回 IAssemblyCache 的指標
  • dwReserved

FUSION_INSTALL_REFERENCE 結構

FUSION_INSTALL_REFERENCE 結構代表時應用程式已安裝在 GAC 中的組件所做的參考。
    typedef struct _FUSION_INSTALL_REFERENCE_
    {
        DWORD  cbSize;
        DWORD  dwFlags;
        GUID   guidScheme;     // Contains one of the pre-defined GUIDs.
        LPCWSTR szIdentifier;  // Unique identifier for the application that installs this  assembly.
        LPCWSTR szNonCannonicalData;  // Data is description; relevant to the GUID above. 
    } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;
				
的欄位結構的定義如下:
  • cbSize-(以位元組為單位) 結構的大小。
  • dwFlags-保留,必須為零。
  • guidScheme-將參考的實體。
  • szIdentifier-識別安裝組件的應用程式的唯一字串。
  • szNonCannonicalData-只瞭解的實體,可以新增參考的字串。GAC 只會儲存此字串。
可能的值為 [guidScheme] 欄位可以是下列之一:
  • 藉由使用 Windows 「 安裝程式已安裝的應用程式參考 FUSION_REFCOUNT_MSI_GUID 組件。[szIdentifier] 欄位設定為 MSI,而 szNonCannonicalData 設定為 [Windows 安裝程式。這種配置必須只使用由 Windows 「 安裝程式本身。
  • FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID 組件參考的應用程式,會出現在 [新增/移除程式szIdentifier 欄位是語彙基元,用來註冊應用程式與 新增/移除程式
  • FUSION_REFCOUNT_FILEPATH_GUID 組件參考由檔案系統中檔案的應用程式。[szIdentifier] 欄位是此檔案路徑。
  • FUSION_REFCOUNT_OPAQUE_STRING_GUID 組件參考的應用程式,只由為不透明的字串表示。szIdentifier 是此不透明的字串。GAC 並不會執行檢查的不透明的參考,當您移除這存在。

ASSEMBLY_INFO 結構

ASSEMBLY_INFO 結構代表組件快取中組件的相關資訊。

定義結構的欄位的方式,如下所示:
  • cbAssemblyInfo-(以位元組為單位) 結構的大小。在未來版本的.NET Framework 中允許結構加入項目。
  • dwAssemblyFlags-指示一或多個 ASSEMBLYINFO_FLAG_ * 位元。
  • uliAssemblySizeInKB 構成組件 (以 KB 為單位) 檔案的大小 (KB)。
  • pszCurrentAssemblyPathBuf-A 指標,保留目前的目錄路徑的字串緩衝區包含組成該組件的檔案。路徑必須以零結尾。
  • cchBuf-pszCurrentAssemblyPathBug 欄位指向緩衝區的大小。
dwAssemblyFlags 可以有下列值之一:
  • ASSEMBLYINFO_FLAG__INSTALLED-指示實際安裝組件。永遠在目前版本的.NET Framework 中設定。
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT-永遠不會設定在目前版本的 「.NET Framework。

IAssemblyCache::UninstallAssembly 方法

IAssemblyCache::UninstallAssembly 方法會移除從 GAC 的組件參考。如果其他應用程式持有沒有其他組件的參考,構成組件檔案會從 GAC 中移除。
    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );

				
參數定義如下:
  • dwFlags-沒有定義的旗標。必須為零。
  • pszAssemblyName-組件的名稱。零結束的 Unicode 字串。
  • pRefData-FUSION_INSTALL_REFERENCE 結構的指標。雖然不建議,這個參數可以是 null。執行應用程式] 參考的情況下安裝組件或所有現有的應用程式參考看不見了。
  • pulDisposition-指標一個整數,指出函式所執行的動作。
注意: 如果 pulDisposition 不為 null 的 pulDisposition 包含下列值之一:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED-檔案已從 GAC 的組件。
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE 應用程式正在使用組件。在 Microsoft Windows 95 和 Microsoft Windows 98 上傳回這個值。
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED 組件不存在於 GAC 中。
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING-無法使用。
  • 尚未移除 IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES 組件從 GAC,因為有另一個應用程式參考。
  • 在 GAC 中找不到 IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUNDpRefData 中所指定的參考。
傳回的值定義如下:
  • S_OK 的組件已解除安裝。
  • S_FALSE-執行的操作成功,但組件不會從 GAC 移除。pulDisposition 說明原因。

IAssemblyCache::QueryAssemblyInfo 方法

IAssemblyCache::QueryAssemblyInfo 方法會擷取從 GAC 的組件的相關資訊。
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
				
參數定義如下:
  • dwFlags-QUERYASMINFO_FLAG_VALIDATEQUERYASMINFO_FLAG_GETSIZE 其中之一:
    • * _VALIDATE-針對組件資訊清單包括雜湊驗證和強式名稱簽章驗證 GAC 中仍會執行驗證的檔案。
    • * _GETSIZE-在組件 (磁碟使用量) 會傳回所有的檔案大小。 如果未指定,ASSEMBLY_INFO::uliAssemblySizeInKB 欄位是不會修改。
  • pszAssemblyName-查詢時的組件名稱。
  • pAsmInfo-傳回 ASSEMBLY_INFO 結構的指標。

IAssemblyCache::InstallAssembly 方法

IAssemblyCache::InstallAssembly 方法會將新的組件加入至 GAC。組件必須保存在檔案系統中,並且複製到 GAC 中。
    HRESULT InstallAssembly( // If you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );
				
參數定義如下:
  • 可以指定 dwFlags-最最 IASSEMBLYCACHE_INSTALL_FLAG_ * 值的位元的其中一個:
    • * _REFRESH-如果組件已經安裝在 GAC 中且正在安裝組件的檔案版本號碼是相同或是稍後,檔案會被取代。
    • * _FORCE_REFRESH-不論其版本號碼會覆寫現有的組件的檔案。
  • pszManifestFilePath-指向所動態連結庫 (DLL) 包含組件資訊清單的字串。其他組件檔必須位於與包含組件資訊清單之 DLL 相同的目錄。
  • pRefData-A 指標,表示正在代表其安裝組件應用程式 FUSION_INSTALL_REFERENCE。雖然不建議,這個參數可以是 null,但這會使沒有應用程式的任何參考組件。

IAssemblyName 介面

IAssemblyName 介面代表組件名稱。組件名稱包括預先決定的組的名稱-值組。組件名稱中有詳細說明在.NET Framework SDK 中。
[
        local,
        object,
        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
        pointer_default(unique)
]
interface IAssemblyName: IUnknown
				
IAssemblyName 的執行個體藉由呼叫 CreateAssemblyNameObject API 取得:
STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved);
的參數定義如下:
  • ppAssemblyNameObj-接收 IAssemblyName 指標所建立的記憶體位置的指標。
  • szAssemblyName-或 dwFlags 由一個完整的組件參考的組件名稱的字串表示。字串表示可以是 null。
  • dwFlags-零或多個 CREATE_ASM_NAME_OBJ_FLAGS 列舉型別中定義之位元。
  • pvReserved-必須是 null。

CREATE_ASM_NAME_OBJ_FLAGS 列舉型別

CREATE_ASM_NAME_OBJ_FLAGS 列舉型別包含下列值:
  • CANOF_PARSE_DISPLAY_NAME-如果指定這個旗標 szAssemblyName 參數都是完整的組件名稱的而且剖析為個別的屬性。如果未指定旗標則 szAssemblyName 會是 「 名稱 」 部份的組件名稱。
  • CANOF_SET_DEFAULT_VALUES-如果這個旗標是指定、 特定的屬性,例如處理器架構是設為其預設值。
    typedef enum {
         CANOF_PARSE_DISPLAY_NAME = 0x1,
         CANOF_SET_DEFAULT_VALUES = 0x2
    } CREATE_ASM_NAME_OBJ_FLAGS;
				

ASM_NAME 列舉型別

ASM_NAME 列舉內容識別碼描述組件名稱中的名稱值配對的有效名稱。.NET Framework SDK,這些屬性的說明,請參閱。
    typedef enum
    {
        ASM_NAME_PUBLIC_KEY = 0,
        ASM_NAME_PUBLIC_KEY_TOKEN,
        ASM_NAME_HASH_VALUE,
        ASM_NAME_NAME,
        ASM_NAME_MAJOR_VERSION,
        ASM_NAME_MINOR_VERSION,
        ASM_NAME_BUILD_NUMBER,
        ASM_NAME_REVISION_NUMBER,
        ASM_NAME_CULTURE,
        ASM_NAME_PROCESSOR_ID_ARRAY,
        ASM_NAME_OSINFO_ARRAY,
        ASM_NAME_HASH_ALGID,
        ASM_NAME_ALIAS,
        ASM_NAME_CODEBASE_URL,
        ASM_NAME_CODEBASE_LASTMOD,
        ASM_NAME_NULL_PUBLIC_KEY,
        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
        ASM_NAME_CUSTOM,
        ASM_NAME_NULL_CUSTOM,                
        ASM_NAME_MVID,
        ASM_NAME_MAX_PARAMS
    } ASM_NAME;
				

IAssemblyName::SetProperty 方法

IAssemblyName::SetProperty 方法將名稱值配對加入至組件] 名稱或者,如果已經存在具有相同名稱的名稱 / 值組,修改或刪除名稱-值組的值。
    HRESULT SetProperty(
        [in]    DWORD  PropertyId, 
        [in]    LPVOID pvProperty,
        [in]    DWORD  cbProperty);
				
參數定義如下:
  • PropertyId-,表示是加入或修改的名稱 / 值組名稱組件的識別碼。有效的屬性 ID 是 ASM_NAME 列舉型別中定義。
  • pvProperty-A 指標,包含屬性的值的緩衝區。
  • cbProperty-pvProperty 緩衝區 (以位元組為單位) 的長度。如果 cbProperty 零會從組件名稱中移除名稱-值組。

IAssemblyName::GetProperty 方法

IAssemblyName::GetProperty 方法會擷取指定名稱的組件名稱中的名稱-值組的值。
    HRESULT GetProperty(
        [in]         DWORD    PropertyId, 
        [out]        LPVOID   pvProperty,
        [in, out]    LPDWORD  pcbProperty);
				
參數定義如下:
  • PropertyId-識別碼,代表要擷取其值是將名稱-值組的名稱。指定的屬性 ID 是 ASM_NAME 列舉型別中定義。
  • pvProperty-A 指標,是包含屬性的值的緩衝區。
  • cbProperty-pvProperty 緩衝區的 (以位元組為單位) 的長度。

IAssemblyName::Finalize 方法

IAssemblyName::Finalize 方法會凍結組件名稱。之後,呼叫這個方法,IAssemblyName::SetProperty 額外的呼叫會失敗。
HRESULT Finalize();

IAssemblyName::GetDisplayName 方法

IAssemblyName::GetDisplayName 方法傳回組件名稱的字串的表示。
    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);
				
參數定義如下:
  • szDisplayName-A 指標,是包含顯示名稱的緩衝區。在 Unicode 中傳回顯示名稱。
  • pccDisplayName-中 (上的輸入) 字元緩衝區的大小。傳回的顯示名稱 (在傳回) 的長度。
  • dwDisplayFlags-一或多個 ASM_DISPLAY_FLAGS 列舉型別中定義之位元:
    • * _VERSION-包括版本號碼做顯示名稱的一部分。
    • * _CULTURE-包括文化特性。
    • * _PUBLIC_KEY_TOKEN-包含公開金鑰語彙基元 (Token)。
    • * _PUBLIC_KEY-包含公用金鑰。
    • * _CUSTOM-包含自訂組件名稱部分。
    • * _PROCESSORARCHITECTURE-包括處理器架構。
    • * _LANGUAGEID-包含語言識別碼。
    typedef enum
    {
        ASM_DISPLAYF_VERSION    = 0x1,
        ASM_DISPLAYF_CULTURE    = 0x2,
        ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
        ASM_DISPLAYF_PUBLIC_KEY = 0x8,
        ASM_DISPLAYF_CUSTOM     = 0x10,
        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
        ASM_DISPLAYF_LANGUAGEID     = 0x40

    } ASM_DISPLAY_FLAGS;
				

IAssemblyName::GetName 方法

IAssemblyName::GetName 方法會傳回組件名稱名稱部分。
    HRESULT GetName(
        [in, out] LPDWORD lpcwBuffer,
        [out] WCHAR *pwzName);
				
參數定義如下:
  • lpcwBuffer-pwszName 緩衝區 (在輸入) 的大小。(在傳回) 名稱的長度。
  • pwszName-是包含組件名稱名稱部分的緩衝區的指標。

IAssemblyName::GetVersion 方法

IAssemblyName::GetVersion 方法會傳回組件名稱版本部分。
HRESULT GetVersion(
        [out] LPDWORD pdwVersionHi,
        [out] LPDWORD pdwVersionLow);
				
參數定義如下:
  • pdwVersionHi-DWORD 包含版本號碼的上層的 32 位元的指標。
  • pdwVersionLow-DWORD 包含版本號碼的較低的 32 位元的指標。

IAssemblyName::IsEqual 方法

IAssemblyName::IsEqual 方法會比較組件名稱,另一個組件名稱。
    HRESULT IsEqual(
        [in] IAssemblyName *pName,
        [in] DWORD dwCmpFlags);
				
參數定義如下:
  • pName-要比較的組件名稱。
  • dwCmpFlags-指定哪些部分在比較中使用組件名稱。
值是一或多個 ASM_CMP_FLAGS 列舉型別中定義之位元:
    typedef enum
    {
        ASM_CMPF_NAME            = 0x1,
        ASM_CMPF_MAJOR_VERSION   = 0x2,
        ASM_CMPF_MINOR_VERSION   = 0x4,
        ASM_CMPF_BUILD_NUMBER    = 0x8,
        ASM_CMPF_REVISION_NUMBER = 0x10,
        ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
        ASM_CMPF_CULTURE         = 0x40,
        ASM_CMPF_CUSTOM          = 0x80,
        ASM_CMPF_ALL = ASM_CMPF_NAME | ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION |
                       ASM_CMPF_REVISION_NUMBER | ASM_CMPF_BUILD_NUMBER |
                       ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE | ASM_CMPF_CUSTOM,
        // For strongly named assemblies, ASM_CMPF_DEFAULT==ASM_CMPF_ALL.
        // For simply named assemblies, this is also true. However, when
        // performing IAssemblyName::IsEqual, the build number/revision 
        // number will be removed from the comparison.
        ASM_CMPF_DEFAULT = 0x100
    } ASM_CMP_FLAGS;                       
				
傳回的值如下:
  • S_OK:-根據與比較準則相符的名稱。
  • S_FALSE:-不相符的名稱。

IAssemblyName::Clone 方法

IAssemblyName::Clone 方法會建立組件名稱的複本。
    HRESULT Clone(
        [out] IAssemblyName **pName);
				

IAssemblyEnum 介面

IAssemblyEnum 介面列舉中 GAC 的組件。
 [
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
				
若要取得 CreateAssemblyEnum API 的執行個體,呼叫 CreateAssemblyNameObject API,如下所示:
STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
的參數定義如下:
  • pEnum-包含 IAssemblyEnum 指標的記憶體位置的指標。
  • pUnkReserved-必須是 null。
  • pName-用來篩選列舉的組件名稱。可以是 null 列舉在 GAC 中的所有組件。
  • dwFlags-固定行高 ASM_CACHE_FLAGS 列舉型別從一個位元。
  • pvReserved-必須是 NULL。

ASM_CACHE_FLAGS 列舉型別

ASM_CACHE_FLAGS 列舉型別包含下列值:
  • ASM_CACHE_ZAP-藉由使用 Ngen.exe 列舉先行編譯的組件快的取。
  • ASM_CACHE_GAC-列舉 GAC。
  • ASM_CACHE_DOWNLOAD-列舉組件的已下載的隨選或者,已經陰影複製。
IAssemblyName::GetDisplayName
typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;
				

IAssemblyEnum::GetNextAssembly 方法

IAssemblyEnum::GetNextAssembly 方法會列舉中 GAC 的組件。
    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );
				
參數定義如下:
  • pvReserved-必須是 null。
  • ppName-要接收下一個列舉的組件的組件名稱的介面指標的記憶體位置的指標。
  • dwFlags-必須是零。

IInstallReferenceItem 介面

IInstallReferenceItem 介面表示在 GAC 中的組件已設定的參考。IInstallReferenceEnum 介面所傳回的 IInstallReferenceIteam 的例項。
[
        local,
        object,
        uuid(582dac66-e678-449f-aba6-6faaec8a9394),
        pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
				

IInstallReferenceItem::GetReference 方法

IInstallReferenceItem::GetReference 方法會傳回 FUSION_INSTALL_REFERENCE 結構。
    HRESULT GetReference
    (
    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,
    [in]  DWORD dwFlags,
    [in]  LPVOID pvReserved
    );
				
參數定義如下:
  • ppRefData-FUSION_INSTALL_REFERENCE 結構的指標。記憶體 GetReference 方法由配置及釋放 IInstallReferenceItem 後釋放。IInstallReferenceItem 物件釋放後,呼叫端必須不保留這個緩衝區的參考。
  • dwFlags-必須是零。
  • pvReserved-必須是 null。

IInstallReferenceEnum 介面

IInstallReferenceEnum 介面列舉在 GAC 中的組件設定的所有參考。

注意: 屬於組件的參考都會被鎖定,變更這些參照會被列舉。
[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
				
若要取得 CreateInstallReferenceEnum API 的執行個體,呼叫 CreateInstallReferenceEnum API,如下所示:
STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
的參數定義如下:
  • ppRefEnum-接收 IInstallReferenceEnum 指標的記憶體位置的指標。
  • pName-參考列舉的組件名稱。
  • dwFlags-必須是零。
  • pvReserved-必須是 null。

IInstallReferenceEnum::GetNextInstallReferenceItem 方法

IInstallReferenceEnum::GetNextInstallReferenceItem 傳回組件中下一個的參考資訊。
    HRESULT GetNextInstallReferenceItem
            (
            [out] IInstallReferenceItem **ppRefItem,
            [in]  DWORD dwFlags,
            [in]  LPVOID pvReserved
            );
				
參數定義如下:
  • ppRefItem-接收 IInstallReferenceItem 指標的記憶體位置的指標。
  • dwFlags-必須是零。
  • pvReserved-必須是 null。
傳回值如下所示:
  • S_OK:-成功傳回下一個項目。
  • S_FALSE:-沒有更多的項目。

GetCachePath API

GetCachePath API 傳回 GAC 的儲存位置。
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
參數定義如下:
  • dwCacheFlags-固定行高其中一個位元 ASM_CACHE_FLAGS 列舉型別中定義。
  • pwzCachePath-要接收為 Unicode 字串 GAC 路徑的緩衝區的指標。
  • pcchPath-Unicode 字元中 pwszCachePath 緩衝區的長度。
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
//+---------------------------------------------------------------------------
// 
//  Microsoft Windows
//  File:       fusion.idl
// 
//  Contents:   Fusion Interfaces
// 
//  Classes:
// 
//  Functions:
// 
// 
//----------------------------------------------------------------------------
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// fusion.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Copyright (c) Microsoft Corporation.  All rights reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("#ifdef _MSC_VER")
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("//---------------------------------------------------------------------------=")
cpp_quote("// Fusion Interfaces.")
cpp_quote("")

import "objidl.idl";

cpp_quote("#ifdef _MSC_VER")
cpp_quote("#pragma once")
cpp_quote("#endif")

interface IAssemblyCache;
interface IAssemblyCacheItem;
interface IAssemblyName;
interface IAssemblyEnum;


typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;

/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyCache
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),
        pointer_default(unique)
]
interface IAssemblyCache : IUnknown
{
    cpp_quote("// {8cedc215-ac4b-488b-93c0-a50a49cb2fb8}")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID, 0x8cedc215, 0xac4b, 0x488b, 0x93, 0xc0, _
0xa5, 0x0a, 0x49, 0xcb, 0x2f, 0xb8);")
    cpp_quote("")
    cpp_quote("// {b02f9d65-fb77-4f7a-afa5-b391309f11c9}")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_FILEPATH_GUID, 0xb02f9d65, 0xfb77, 0x4f7a, 0xaf, 0xa5, 0xb3, 0x91, _
0x30, 0x9f, 0x11, 0xc9);")
    cpp_quote("")
    cpp_quote("// {2ec93463-b0c3-45e1-8364-327e96aea856}")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_OPAQUE_STRING_GUID, 0x2ec93463, 0xb0c3, 0x45e1, 0x83, 0x64, 0x32, _
0x7e, 0x96, 0xae, 0xa8, 0x56);")

    cpp_quote(" // {25df0fc1-7f97-4070-add7-4b13bbfd7cb8} // this GUID cannot be used for installing into GAC.")
    cpp_quote("DEFINE_GUID(FUSION_REFCOUNT_MSI_GUID,  0x25df0fc1, 0x7f97, 0x4070, 0xad, 0xd7, 0x4b, 0x13, 0xbb, 0xfd, _
0x7c, 0xb8); ")


    typedef struct _FUSION_INSTALL_REFERENCE_
    {
        DWORD  cbSize;
        DWORD  dwFlags;
        GUID   guidScheme; // contains one of the pre-defined guids.
        LPCWSTR szIdentifier;  // unique identifier for app installing this  assembly.
        LPCWSTR szNonCannonicalData;  // data is description; relevent to the guid above 
    } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;

    typedef const FUSION_INSTALL_REFERENCE  *LPCFUSION_INSTALL_REFERENCE;


    typedef struct _ASSEMBLY_INFO
    {
        ULONG cbAssemblyInfo; // size of this structure for future expansion
        DWORD dwAssemblyFlags;
        ULARGE_INTEGER uliAssemblySizeInKB;
        LPWSTR pszCurrentAssemblyPathBuf;
        ULONG   cchBuf; // size of path buf.
    } ASSEMBLY_INFO;

    cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_REFRESH       (0x00000001)")
    cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH (0x00000002)")

    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED (1)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE (2)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED (3)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING (4)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES (5)")
    cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND (6)")

    cpp_quote("#define QUERYASMINFO_FLAG_VALIDATE        (0x00000001)")
    cpp_quote("#define QUERYASMINFO_FLAG_GETSIZE         (0x00000002)")

    // these flags are for dwAssemblyFlags field in struct _ASSEMBLY_INFO  
    cpp_quote("#define ASSEMBLYINFO_FLAG_INSTALLED       (0x00000001)")
    cpp_quote("#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT (0x00000002)")

    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );
 
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
 
    HRESULT CreateAssemblyCacheItem( 
        [in] DWORD dwFlags,
        [in] PVOID pvReserved,
        [out] IAssemblyCacheItem **ppAsmItem,
        [in, optional] LPCWSTR pszAssemblyName  // uncanonicalized, comma separated name=value pairs.
        );
        
    HRESULT CreateAssemblyScavenger
    (
        [out]   IUnknown **ppUnkReserved
    );

    HRESULT InstallAssembly( // if you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );

}


/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyCacheItem
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),
        pointer_default(unique)
]
interface IAssemblyCacheItem : IUnknown
{
    cpp_quote("#define STREAM_FORMAT_COMPLIB_MODULE    0")
    cpp_quote("#define STREAM_FORMAT_COMPLIB_MANIFEST  1")
    cpp_quote("#define STREAM_FORMAT_WIN32_MODULE      2")
    cpp_quote("#define STREAM_FORMAT_WIN32_MANIFEST    4")
    
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH       (0x00000001)")
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH (0x00000002)")
    
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED (1)") // first time install
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED (2)") // overwrite, if existing
    cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED (3)") // existing, 
    

    HRESULT CreateStream(
        [in] DWORD dwFlags,                         // For general API flags
        [in] LPCWSTR pszStreamName,                 // Name of the stream to be passed in
        [in] DWORD dwFormat,                        // format of the file to be streamed in.
        [in] DWORD dwFormatFlags,                   // format-specific flags
        [out] IStream **ppIStream,
        [in, optional] ULARGE_INTEGER *puliMaxSize  // Max size of the Stream.
        );
 
    HRESULT Commit
    (
        [in] DWORD dwFlags, // For general API flags like IASSEMBLYCACHEITEM _COMMIT_FLAG_REFRESH 
        [out, optional] ULONG *pulDisposition
    ); 
 
    HRESULT AbortItem(); // If you have created IAssemblyCacheItem and don't plan to use it, its good idea to call 
    AbortItem before releasing it.

}



/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyName
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
        pointer_default(unique)
]
interface IAssemblyName: IUnknown
{
    typedef [unique] IAssemblyName *LPASSEMBLYNAME;
    
    typedef enum {
         CANOF_PARSE_DISPLAY_NAME = 0x1,
         CANOF_SET_DEFAULT_VALUES = 0x2
    } CREATE_ASM_NAME_OBJ_FLAGS;
    
    typedef enum
    {
        ASM_NAME_PUBLIC_KEY = 0,
        ASM_NAME_PUBLIC_KEY_TOKEN,
        ASM_NAME_HASH_VALUE,
        ASM_NAME_NAME,
        ASM_NAME_MAJOR_VERSION,
        ASM_NAME_MINOR_VERSION,
        ASM_NAME_BUILD_NUMBER,
        ASM_NAME_REVISION_NUMBER,
        ASM_NAME_CULTURE,
        ASM_NAME_PROCESSOR_ID_ARRAY,
        ASM_NAME_OSINFO_ARRAY,
        ASM_NAME_HASH_ALGID,
        ASM_NAME_ALIAS,
        ASM_NAME_CODEBASE_URL,
        ASM_NAME_CODEBASE_LASTMOD,
        ASM_NAME_NULL_PUBLIC_KEY,
        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
        ASM_NAME_CUSTOM,
        ASM_NAME_NULL_CUSTOM,                
        ASM_NAME_MVID,
        ASM_NAME_MAX_PARAMS
    } ASM_NAME;
    
    typedef enum
    {
        ASM_DISPLAYF_VERSION    = 0x1,
        ASM_DISPLAYF_CULTURE    = 0x2,
        ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
        ASM_DISPLAYF_PUBLIC_KEY = 0x8,
        ASM_DISPLAYF_CUSTOM     = 0x10,
        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
        ASM_DISPLAYF_LANGUAGEID     = 0x40

    } ASM_DISPLAY_FLAGS;
    
    typedef enum
    {
        ASM_CMPF_NAME            = 0x1,
        ASM_CMPF_MAJOR_VERSION   = 0x2,
        ASM_CMPF_MINOR_VERSION   = 0x4,
        ASM_CMPF_BUILD_NUMBER    = 0x8,
        ASM_CMPF_REVISION_NUMBER = 0x10,
        ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
        ASM_CMPF_CULTURE         = 0x40,
        ASM_CMPF_CUSTOM          = 0x80,
        ASM_CMPF_ALL = ASM_CMPF_NAME | ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION |
                       ASM_CMPF_REVISION_NUMBER | ASM_CMPF_BUILD_NUMBER |
                       ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE | ASM_CMPF_CUSTOM,
        // For strongly named assemblies, ASM_CMPF_DEFAULT==ASM_CMPF_ALL.
        // For simply named assemblies, this is also true, however, when
        // performing IAssemblyName::IsEqual, the build number/revision 
        // number will be removed from the comparision.
        ASM_CMPF_DEFAULT = 0x100
    } ASM_CMP_FLAGS;                       

    HRESULT SetProperty(
        [in]    DWORD  PropertyId, 
        [in]    LPVOID pvProperty,
        [in]    DWORD  cbProperty);

    HRESULT GetProperty(
        [in]         DWORD    PropertyId, 
        [out]        LPVOID   pvProperty,
        [in, out]    LPDWORD  pcbProperty);

    HRESULT Finalize();

    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);

    HRESULT BindToObject(
        [in]      REFIID               refIID,
        [in]      IUnknown            *pUnkSink, 
        [in]      IUnknown            *pUnkContext,
        [in]      LPCOLESTR            szCodeBase,
        [in]      LONGLONG             llFlags,
        [in]      LPVOID               pvReserved,
        [in]      DWORD                cbReserved,
        [out]     LPVOID               *ppv);


    HRESULT GetName(
        [in, out] LPDWORD lpcwBuffer,
        [out] WCHAR *pwzName);
        
    HRESULT GetVersion(
        [out] LPDWORD pdwVersionHi,
        [out] LPDWORD pdwVersionLow);

    HRESULT IsEqual(
        [in] IAssemblyName *pName,
        [in] DWORD dwCmpFlags);
        
    HRESULT Clone(
        [out] IAssemblyName **pName);
        

}

/////////////////////////////////////////////////////////////////////////////// 
// 
// IAssemblyEnum
// 
/////////////////////////////////////////////////////////////////////////////// 
[
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
{

    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );

    HRESULT Reset(void);

    HRESULT Clone 
    (
        [out] IAssemblyEnum **ppEnum
    );
    
}


/////////////////////////////////////////////////////////////////////////////// 
// 
// IInstallReferenceItem
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(582dac66-e678-449f-aba6-6faaec8a9394),
        pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
{
    HRESULT GetReference
    (
    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,
    [in]  DWORD dwFlags,
    [in]  LPVOID pvReserved
    );
}

/////////////////////////////////////////////////////////////////////////////// 
// 
// IInstallReferenceEnum
// 
/////////////////////////////////////////////////////////////////////////////// 

[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
{
    HRESULT GetNextInstallReferenceItem
            (
            [out] IInstallReferenceItem **ppRefItem,
            [in]  DWORD dwFlags,
            [in]  LPVOID pvReserved
            );
}

#pragma midl_echo("STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, _
LPVOID pvReserved);      ")
#pragma midl_echo("STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, _
LPVOID pvReserved);      ") 
#pragma midl_echo("STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, _
LPVOID pvReserved);             ")
#pragma midl_echo("STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); ")
#pragma midl_echo("STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath); ")
				

屬性

文章編號: 317540 - 上次校閱: 2003年4月4日 - 版次: 3.0
這篇文章中的資訊適用於:
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
關鍵字:?
kbmt kbbug kbdocerr kbpending KB317540 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:317540
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com