DOC: Global Assembly Cache (GAC) API jsou nebyly zdokumentovány ve dokumentace .NET Framework Software Development Kit (SDK)

Překlady článku Překlady článku
ID článku: 317540 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Nativním kódu rozhraní pro programování aplikací (API), které umožňují interaktivně pracovat s Global Assembly Cache (GAC) nejsou popsány v dokumentaci .NET Framework Software Development Kit (SDK).

Další informace

Upozornění: používat tyto API v aplikaci provést vazby sestavení nebo testování přítomnost sestavení nebo jiných běhu, vývoj nebo návrhu operací. Tyto API musí používat pouze instalační programy a nástroje pro správu. Pokud používáte GAC to přímo zpřístupní aplikace fragility vazby sestavení nebo způsobit aplikace pracovat nesprávně na budoucí verze .NET Framework.

GAC ukládá sestavení, které jsou sdíleny všechny aplikace v počítači. Umístění úložiště skutečné a struktury GAC není popsána a podléhají změnám v budoucích verzích operačního systému Microsoft Windows a .NET Framework.

Prostřednictvím rozhraní API, které jsou popsány v tomto článku je pouze podporovanou metodu k sestavení přístup v GAC.

Většina aplikací není nutné používat tyto API, protože sestavení vazby je automaticky prováděno pomocí společného jazykového modulu runtime. Tyto API musí používat pouze vlastní instalační programy nebo nástroje pro správu. Instalační služba Microsoft Windows Installer má nativní podporu pro instalaci sestavení GAC.

Další informace o sestavení a GAC viz .NET Framework SDK.

GAC API použijte v následujících scénářích:
  • Při instalaci sestavení GAC.
  • Při odebrání sestavení z GAC.
  • Při exportu sestavení z GAC.
  • Výčet sestavení, které jsou k dispozici v GAC.
Poznámka: CoInitialize(Ex) musí být volána před použitím kterékoli funkce a rozhraní, které jsou popsány v této specifikaci.

Rozhraní IAssemblyCache

Rozhraní IAssemblyCache je nejvyšší úrovně rozhraní, které poskytuje přístup GAC.

Získání instance CreateAssemblyCache API volání CreateAssemblyCache API, následovně:
STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); 
parametry jsou definovány následovně:
  • ppAsmCache - ukazatel vrátit IAssemblyCache
  • dwReserved

Struktura FUSION_INSTALL_REFERENCE

Struktura FUSION_INSTALL_REFERENCE představuje odkaz provedených při aplikace nainstaloval sestavení v 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;
				
polí struktury jsou definovány následovně:
  • cbSize - velikost struktury v bajtech.
  • parametr dwFlags - vyhrazeno, musí být nula.
  • guidScheme - entita, která přidá odkaz.
  • szIdentifier - jedinečný řetězec identifikující aplikace nainstalována sestavení.
  • szNonCannonicalData - řetězec, který je pouze srozumitelné entity přidá odkaz. GAC ukládá pouze tento řetězec.
Možné hodnoty pro pole guidScheme může být jeden z následujících:
  • FUSION_REFCOUNT_MSI_GUID - sestavení odkazuje aplikace nainstalované pomocí Instalační služba Windows Installer. Pole szIdentifier nastavena MSI a szNonCannonicalData nastavena Instalační služba Windows Installer. Toto schéma musí být pouze používaný Instalační služba Windows Installer samotného.
  • FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID - sestavení odkazuje aplikace, která se zobrazí v okně Přidat nebo odebrat programy. Pole szIdentifier je token, který slouží k registraci aplikace Přidat nebo odebrat programy.
  • FUSION_REFCOUNT_FILEPATH_GUID - sestavení odkazuje aplikace, která je zastoupena souboru v systému souborů. Pole szIdentifier je cesta k tomuto souboru.
  • FUSION_REFCOUNT_OPAQUE_STRING_GUID - sestavení odkazuje aplikace, která je pouze reprezentován neprůhledné řetězec. SzIdentifier je tento řetězec neprůhledný. GAC neprovádí existence při odebrání této kontrole neprůhledné odkazy.

Struktura ASSEMBLY_INFO

Struktura ASSEMBLY_INFO představuje informace o sestavení v mezipaměti sestavení.

Pole struktury jsou definována následujícím způsobem:
  • cbAssemblyInfo - velikost struktury v bajtech. Povoluje dodatky strukturu v budoucí verzi rozhraní .NET Framework.
  • dwAssemblyFlags - označuje jednu nebo více bitů ASSEMBLYINFO_FLAG_ *.
  • uliAssemblySizeInKB - velikost soubory, které tvoří sestavení v kilobajtech (KB).
  • pszCurrentAssemblyPathBuf - ukazatel na řetězec vyrovnávací paměti, která obsahuje aktuální cestu adresáře, který obsahuje soubory, které tvoří sestavení. Cesta musí končit nulu.
  • cchBuf - velikost vyrovnávací paměti, která odkazuje na pole pszCurrentAssemblyPathBug.
dwAssemblyFlags může mít jeden z následujících hodnot:
  • ASSEMBLYINFO_FLAG__INSTALLED - označuje sestavení je ve skutečnosti instalován. Vždy nastavit v aktuální verzi rozhraní .NET Framework.
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT - nikdy nastavit v aktuální verzi .NET Framework.

Metoda IAssemblyCache::UninstallAssembly

Metoda IAssemblyCache::UninstallAssembly odebere odkaz na sestavení z GAC. Pokud jiných aplikací podržte žádné odkazy na sestavení, soubory, které tvoří sestavení odebrán z GAC.
    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );

				
Parametry jsou definovány následovně:
  • parametr dwFlags - bez definované příznaky. Musí být nula.
  • pszAssemblyName - název sestavení. Unicode ukončen nulový řetězec.
  • pRefData - ukazatel na strukturu FUSION_INSTALL_REFERENCE. Ačkoli není doporučeno, může být tento parametr hodnotu null. Sestavení nainstalován bez odkazu aplikace nebo chybějí všechny existující odkazy aplikace.
  • pulDisposition - ukazatele označuje akci provedenou funkce celé.
Poznámka: pulDisposition není null, pulDisposition obsahuje jeden z následujících hodnot:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED - sestavení odebrány soubory z GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE - aplikace pomocí sestavení. Tato hodnota je vrácena na Microsoft Windows 95 a Microsoft Windows 98.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED - sestavení neexistuje v GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING - není použita.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES - sestavení není odebrána z GAC protože existuje jiný odkaz aplikace.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND - odkaz zadaný v pRefData nebyla nalezena v GAC.
Vrácené hodnoty jsou definovány následovně:
  • S_OK - sestavení odinstalován.
  • S_FALSE - byla operace úspěšná, ale sestavení nebyl odebrán z GAC. Důvod je popsána v pulDisposition.

Metoda IAssemblyCache::QueryAssemblyInfo

Metoda IAssemblyCache::QueryAssemblyInfo načítá informace o sestavení z GAC.
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
				
Parametry jsou definovány následovně:
  • parametr dwFlags - jedna z QUERYASMINFO_FLAG_VALIDATE nebo QUERYASMINFO_FLAG_GETSIZE:
    • * _VALIDATE-provede ověření soubory GAC proti manifestu sestavení včetně ověření algoritmu hash a ověření podpisu silného názvu.
    • * _GETSIZE-vrátí velikost všech souborů v sestavení (nároky místo disku). Pokud není zadán, nebude pole ASSEMBLY_INFO::uliAssemblySizeInKB změněn.
  • pszAssemblyName - sestavení je dotazovaný název.
  • pAsmInfo - ukazatel na vrácené strukturu ASSEMBLY_INFO.

Metoda IAssemblyCache::InstallAssembly

Metoda IAssemblyCache::InstallAssembly přidá nové sestavení GAC. Sestavení musí být trvalé v systému souborů a zkopírován GAC.
    HRESULT InstallAssembly( // If you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );
				
Parametry jsou definovány následovně:
  • může být zadán parametr dwFlags-, nejvýše jeden bitů hodnoty IASSEMBLYCACHE_INSTALL_FLAG_ *:
    • * _REFRESH - Pokud sestavení je již nainstalována v GAC a čísel verzí souborů instalovaných sestavení jsou stejné nebo vyšší, budou soubory nahrazeny.
    • * _FORCE_REFRESH-soubory existující sestavení přepsány bez ohledu na jejich číslo verze.
  • pszManifestFilePath - řetězec směřující propojené dynamické knihovny (DLL obsahující manifestu sestavení). Další soubory sestavení musí nacházet ve stejném adresáři jako DLL obsahující manifestu sestavení.
  • pRefData - ukazatel FUSION_INSTALL_REFERENCE označuje aplikace, v jehož zastoupení je nainstalována sestavení. Ačkoli není doporučeno, tento parametr může být null, ale ponechá toto sestavení bez jakékoli aplikace odkazu.

Rozhraní IAssemblyName

Rozhraní IAssemblyName představuje název sestavení. Název sestavení obsahuje sadu předdefinovaných dvojice název hodnota. Název sestavení je podrobně popsáno v .NET Framework SDK.
[
        local,
        object,
        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
        pointer_default(unique)
]
interface IAssemblyName: IUnknown
				
Instance IAssemblyName získat voláním API CreateAssemblyNameObject:
STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved);
parametry jsou definovány následovně:
  • ppAssemblyNameObj - ukazatel umístění paměti, které obdrží IAssemblyName ukazatel, který je vytvořen.
  • szAssemblyName - znázornění řetězec název sestavení nebo odkaz úplné sestavení, která je určena parametr dwFlags. Znázornění řetězec může mít hodnotu null.
  • parametr dwFlags - žádná a více bitů, které jsou definovány v CREATE_ASM_NAME_OBJ_FLAGS výčtu.
  • pvReserved - musí být null.

Výčet CREATE_ASM_NAME_OBJ_FLAGS

Výčet CREATE_ASM_NAME_OBJ_FLAGS obsahuje následující hodnoty:
  • CANOF_PARSE_DISPLAY_NAME - Pokud je zadán tento příznak, parametr szAssemblyName je název sestavení úplný a je analyzovat jednotlivé vlastnosti. Pokud není zadán příznak, je szAssemblyName "Název" část název sestavení.
  • CANOF_SET_DEFAULT_VALUES - Pokud je tento příznak zadaný, určité vlastnosti, například architekturu procesoru jsou nastaveny výchozí hodnoty.
    typedef enum {
         CANOF_PARSE_DISPLAY_NAME = 0x1,
         CANOF_SET_DEFAULT_VALUES = 0x2
    } CREATE_ASM_NAME_OBJ_FLAGS;
				

Výčet ASM_NAME

Vlastnost ID výčtu ASM_NAME popisuje platné názvy dvojice název hodnota v názvu sestavení. Viz .NET Framework SDK popis těchto vlastností.
    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;
				

Metoda IAssemblyName::SetProperty

Metoda IAssemblyName::SetProperty přidá dvojice název hodnota název sestavení nebo, pokud dvojice název hodnota se stejným názvem již existuje, upraví či odstraní hodnotu dvojice název hodnota.
    HRESULT SetProperty(
        [in]    DWORD  PropertyId, 
        [in]    LPVOID pvProperty,
        [in]    DWORD  cbProperty);
				
Parametry jsou definovány následovně:
  • PropertyId - IDENTIFIKÁTOR, který představuje název součástí dvojice název hodnota je být přidán nebo být upravena. Vlastnost platné ID jsou definovány ve výčtu ASM_NAME.
  • pvProperty - ukazatele vyrovnávací paměti, která obsahuje hodnotu vlastnosti.
  • cbProperty - délka pvProperty vyrovnávací paměti v bajtech. Pokud cbProperty je nula, dvojice název hodnota odebrán z název sestavení.

Metoda IAssemblyName::GetProperty

Metoda IAssemblyName::GetProperty načte hodnotu dvojice název hodnota v název sestavení Určuje název.
    HRESULT GetProperty(
        [in]         DWORD    PropertyId, 
        [out]        LPVOID   pvProperty,
        [in, out]    LPDWORD  pcbProperty);
				
Parametry jsou definovány následovně:
  • PropertyId - IDENTIFIKÁTOR, který představuje název dvojice název hodnota, jejíž hodnota je načtena. Zadaná vlastnost ID jsou definovány ve výčtu ASM_NAME.
  • pvProperty - ukazatele vyrovnávací paměti, které je obsahují hodnotu vlastnosti.
  • cbProperty - délka pvProperty vyrovnávací paměti (v bajtech.

Metoda IAssemblyName::Finalize

Metoda IAssemblyName::Finalize zamrzne název sestavení. Další volání IAssemblyName::SetProperty neúspěšné po Tato metoda volána.
HRESULT Finalize();

Metoda IAssemblyName::GetDisplayName

IAssemblyName::GetDisplayName metoda vrátí řetězec reprezentace název sestavení.
    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);
				
Parametry jsou definovány následovně:
  • szDisplayName - ukazatele vyrovnávací paměti, které je obsahují název zobrazení. Zobrazované jméno je vrácena ve formátu Unicode.
  • pccDisplayName - velikost vyrovnávací paměti v znaků (na vstupu). Délka vrácených zobrazovaný název (na návrat).
  • dwDisplayFlags - jedna nebo více bitů definované ve výčtu ASM_DISPLAY_FLAGS:
    • * _VERSION-zahrnuje číslo verze jako část zobrazovaný název.
    • * _CULTURE-zahrnuje jazykové verze.
    • * _PUBLIC_KEY_TOKEN-obsahuje token veřejného klíče.
    • * _PUBLIC_KEY-obsahuje veřejný klíč.
    • * _CUSTOM-zahrnuje vlastní část názvu sestavení.
    • * _PROCESSORARCHITECTURE-zahrnuje architekturu procesoru.
    • * _LANGUAGEID-obsahuje ID jazyka.
    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;
				

Metoda IAssemblyName::GetName

Metoda IAssemblyName::GetName vrátí název součástí názvu sestavení.
    HRESULT GetName(
        [in, out] LPDWORD lpcwBuffer,
        [out] WCHAR *pwzName);
				
Parametry jsou definovány následovně:
  • lpcwBuffer - velikost vyrovnávací paměti pwszName (na vstupu). Délka názvu (na návrat).
  • pwszName - ukazatel do vyrovnávací paměti je obsahovat název část název sestavení.

Metoda IAssemblyName::GetVersion

Metoda IAssemblyName::GetVersion vrátí verze část názvu sestavení.
HRESULT GetVersion(
        [out] LPDWORD pdwVersionHi,
        [out] LPDWORD pdwVersionLow);
				
Parametry jsou definovány následovně:
  • pdwVersionHi - ukazatel DWORD obsahuje horní 32 bity číslo verze.
  • pdwVersionLow - ukazatel DWORD, které obsahují dolní 32 bity číslo verze.

Metoda IAssemblyName::IsEqual

Metoda IAssemblyName::IsEqual porovná název sestavení na jiné názvy sestavení.
    HRESULT IsEqual(
        [in] IAssemblyName *pName,
        [in] DWORD dwCmpFlags);
				
Parametry jsou definovány následovně:
  • pName - název sestavení pro porovnání.
  • dwCmpFlags - označuje část název sestavení použít v porovnání.
Hodnoty jsou jeden nebo více bitů definované ve výčtu 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;                       
				
vrácené hodnoty jsou následující:
  • S_OK:-názvy odpovídat podle kritéria porovnání.
  • S_FALSE:-názvy neodpovídají.

Metoda IAssemblyName::Clone

Metoda IAssemblyName::Clone vytvoří kopii název sestavení.
    HRESULT Clone(
        [out] IAssemblyName **pName);
				

Rozhraní IAssemblyEnum

Rozhraní IAssemblyEnum výčet sestavení v GAC.
 [
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
				
Získání instance CreateAssemblyEnum API volání CreateAssemblyNameObject API, následovně:
STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
parametry jsou definovány následovně:
  • pEnum - ukazatel umístění paměti, které obsahuje ukazatel IAssemblyEnum.
  • pUnkReserved - musí být null.
  • pName - název sestavení, které slouží k filtrování výčtu. Může být null výčet všech sestavení GAC.
  • parametr dwFlags - přesně jeden bit z výčtu ASM_CACHE_FLAGS.
  • pvReserved - musí být NULL.

Výčet ASM_CACHE_FLAGS

Výčet ASM_CACHE_FLAGS obsahuje následující hodnoty:
  • ASM_CACHE_ZAP - výčet pomocí Ngen.exe mezipaměti předkompilovaný sestavení.
  • ASM_CACHE_GAC - výčet GAC.
  • ASM_CACHE_DOWNLOAD - výčet sestavení, které byly staženy na požádání nebo, které byly zkopírovány stínu.
IAssemblyName::GetDisplayName
typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;
				

Metoda IAssemblyEnum::GetNextAssembly

Metoda IAssemblyEnum::GetNextAssembly výčet sestavení v GAC.
    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );
				
Parametry jsou definovány následovně:
  • pvReserved - musí být null.
  • ppName - ukazatel umístění paměti, které je přijímat rozhraní ukazatel na název sestavení další sestavení, která je ve výčtu.
  • parametr dwFlags - musí být nula.

Rozhraní IInstallReferenceItem

Rozhraní IInstallReferenceItem představuje odkaz na sestavení v GAC byl nastaven. Rozhraní IInstallReferenceEnum jsou vráceny instance IInstallReferenceIteam.
[
        local,
        object,
        uuid(582dac66-e678-449f-aba6-6faaec8a9394),
        pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
				

Metoda IInstallReferenceItem::GetReference

Metoda IInstallReferenceItem::GetReference vrátí struktury FUSION_INSTALL_REFERENCE.
    HRESULT GetReference
    (
    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,
    [in]  DWORD dwFlags,
    [in]  LPVOID pvReserved
    );
				
Parametry jsou definovány následovně:
  • ppRefData - ukazatel na strukturu FUSION_INSTALL_REFERENCE. Paměť přidělenou metoda GetReference a uvolněna při vydání IInstallReferenceItem. Volajícím musí odkaz této vyrovnávací paměti není stisknuté po vydání objekt IInstallReferenceItem.
  • parametr dwFlags - musí být nula.
  • pvReserved - musí být null.

Rozhraní IInstallReferenceEnum

Rozhraní IInstallReferenceEnum výčet všechny odkazy, které jsou nastaveny na sestavení v GAC.

Poznámka: Při vytváření tyto odkazy jsou výčtů jsou odkazy, které patří k sestavení uzamčen pro změny.
[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
				
Získání instance CreateInstallReferenceEnum API volání CreateInstallReferenceEnum API, následovně:
STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
parametry jsou definovány následovně:
  • ppRefEnum - umístění paměti, které obdrží IInstallReferenceEnum ukazatele ukazatele.
  • pName - název sestavení pro které budou vyčísleny odkazy.
  • parametr dwFlags - musí být nula.
  • pvReserved - musí být null.

Metoda IInstallReferenceEnum::GetNextInstallReferenceItem

IInstallReferenceEnum::GetNextInstallReferenceItem vrátí další referenční informace pro sestavení.
    HRESULT GetNextInstallReferenceItem
            (
            [out] IInstallReferenceItem **ppRefItem,
            [in]  DWORD dwFlags,
            [in]  LPVOID pvReserved
            );
				
Parametry jsou definovány následovně:
  • ppRefItem - ukazatel umístění paměti, které obdrží ukazatel IInstallReferenceItem.
  • parametr dwFlags - musí být nula.
  • pvReserved - musí být null.
Vrácené hodnoty jsou následující:
  • S_OK:-úspěšně vrátil další položku.
  • S_FALSE:-žádné další položky.

GetCachePath API

GetCachePath API vrací umístění úložiště GAC.
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
Parametry jsou definovány následovně:
  • dwCacheFlags - přesně jeden bity definované v ASM_CACHE_FLAGS výčtu.
  • pwzCachePath - ukazatel vyrovnávací paměť, která je přijímat cestu GAC jako řetězec Unicode.
  • pcchPath - délka pwszCachePath vyrovnávací paměti (ve znacích Unicode.
// ==++==
// 
//   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); ")
				

Vlastnosti

ID článku: 317540 - Poslední aktualizace: 4. dubna 2003 - Revize: 3.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
Klíčová slova: 
kbmt kbbug kbdocerr kbpending KB317540 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:317540
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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