DOC: Global Assembly Cache (GAC) rozhraní API není popsána v dokumentaci k rozhraní.NET Framework Software Development Kit (SDK)

Prohlášení o odmítnutí odpovědnosti pro už nepodporovaný obsah KB

Tento článek byl napsán pro produkty, ke kterým již Microsoft nadále nenabízí podporu. Článek je tedy poskytován „tak, jak je“ a nebude už nadále aktualizován.

Souhrn

Nativní kód rozhraní (API), které umožňují interakci s globální mezipaměti sestavení (GAC) nejsou popsány v dokumentaci k rozhraní.NET Framework Software Development Kit (SDK).

Další informace

Upozornění: Nepoužívejte tato rozhraní API v aplikaci provádět vazby sestavení nebo testu na přítomnost sestavení nebo jiných běhu, rozvoj nebo operace v době návrhu. Tato rozhraní API musí používat pouze instalační programy a nástroje pro správu. Pokud používáte GAC, to přímo zpřístupňuje aplikaci nestálost vazby sestavení nebo může způsobit, že aplikace nebudou pracovat správně v budoucích verzích rozhraní.NET Framework.

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

Jedinou podporovanou metodou pro přístup k sestavení v mezipaměti GAC je prostřednictvím rozhraní API, které jsou popsány v tomto článku.

Většina aplikací není nutné použití těchto rozhraní API, protože vazba sestavení se provádí automaticky pomocí společného jazykového modulu runtime. Tato rozhraní 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í v GAC.

Další informace o sestavení a GAC naleznete v sadě SDK pro rozhraní.NET Framework.

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

Rozhraní IAssemblyCache

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

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

Strukturu FUSION_INSTALL_REFERENCE

Strukturu FUSION_INSTALL_REFERENCE představuje odkaz je provedena, pokud byla aplikace nainstalována sestavení v mezipaměti 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;

Položky struktury jsou definovány takto:
  • cbSize - velikost struktury v bajtech.
  • parametr dwFlags - rezervováno, musí být nula.
  • guidScheme - entita, která přidá odkaz.
  • szIdentifier - jedinečný řetězec, který identifikuje aplikaci, ve které je nainstalován sestavení.
  • szNonCannonicalData - řetězec, který je pouze entita, která přidá odkaz na srozumitelné. GAC ukládá pouze tento řetězec.
Možné hodnoty pro pole guidScheme může být jeden z následujících kroků:
  • FUSION_REFCOUNT_MSI_GUID - sestavení odkazuje aplikace, která je nainstalována pomocí Instalační služba Windows Installer. Pole szIdentifier nastavena na MSIa szNonCannonicalData nastavena na Instalační služba Windows Installer. Toto schéma musí být užíván pouze Instalační služba Windows Installer sám.
  • FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID - sestavení odkazuje aplikace, která se zobrazí v Panelu 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 reprezentována 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 neprůhledné řetězec. GAC existence kontrola neprůhledné odkazy odeberete toto neprovádí.

Struktura ASSEMBLY_INFO

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

Položky struktury jsou definovány takto:
  • cbAssemblyInfo - velikost struktury v bajtech. Tvorba struktury umožňuje v budoucí verzi rozhraní.NET Framework.
  • dwAssemblyFlags - označuje jeden nebo více bitů ASSEMBLYINFO_FLAG_ * .
  • uliAssemblySizeInKB - velikost souborů, které tvoří sestavení v kilobajtech (KB).
  • pszCurrentAssemblyPathBuf - ukazatel na řetězec vyrovnávací paměť, obsahující aktuální cestu k adresáři, 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 jednu z následujících hodnot:
  • ASSEMBLYINFO_FLAG__INSTALLED - označuje, že sestavení je skutečně nainstalován. Vždy nastavte v aktuální verzi rozhraní.NET Framework.
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT - nikdy nastavit v aktuální verzi rozhraní.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í jsou odebrány 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 příznaků definovaných. Musí být nula.
  • pszAssemblyName - název sestavení. Ukončen nulový řetězec znaků Unicode.
  • pRefData - ukazatel na strukturu FUSION_INSTALL_REFERENCE . Ačkoli to není doporučeno, může být tento parametr null. Sestavení je nainstalována bez odkazu na aplikaci nebo všechny existující odkazy aplikace jsou pryč.
  • pulDisposition - ukazatel na celé číslo, které označuje akci, která se provádí pomocí funkce.
Poznámka: Pokud pulDisposition není null, pulDisposition obsahuje jednu z následujících hodnot:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED - název sestavení, které soubory byly odebrány z GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE - aplikace používá sestavení. Tato hodnota je vrácena v systému Microsoft Windows 95 a Microsoft Windows 98.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED - sestavení v mezipaměti GAC neexistuje.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING - Nepoužito.
  • Vzhledem k tomu, že existuje jiný odkaz aplikace nebylo odebráno IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES - sestavení z GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND - odkaz, který je určen v pRefData nebyla nalezena v mezipaměti GAC.
Vrácené hodnoty jsou definovány takto:
  • S_OK - sestavení byl odinstalován.
  • S_FALSE - operace byla úspěšná, ale sestavení nebyl odebrán z GAC. Důvodem je popsán v pulDisposition.

Metoda IAssemblyCache::QueryAssemblyInfo

IAssemblyCache::QueryAssemblyInfo metoda načte 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 - QUERYASMINFO_FLAG_VALIDATE nebo QUERYASMINFO_FLAG_GETSIZE:
    • * _VALIDATE -provede ověření souborů v mezipaměti GAC proti manifestu sestavení včetně hash ověřování a ověřování podpisů silného názvu.
    • * _GETSIZE -vrátí velikost všech souborů v sestavení (půdorys disku). Pokud není tento parametr zadán, nebude změněn na ASSEMBLY_INFO::uliAssemblySizeInKB pole.
  • pszAssemblyName - název sestavení, který je dotazován.
  • pAsmInfo - ukazatel na strukturu vrácené ASSEMBLY_INFO .

Metoda IAssemblyCache::InstallAssembly

Metoda IAssemblyCache::InstallAssembly přidá nové sestavení v GAC. Sestavení musí přetrvat v systému souborů a je zkopírován do mezipaměti 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ě:
  • parametr dwFlags - nanejvýš jeden bitů hodnoty IASSEMBLYCACHE_INSTALL_FLAG_ * lze zadat:
    • * _REFRESH - Pokud sestavení je již nainstalována v GAC a čísel verzí souborů instalovaných sestavení jsou stejné nebo vyšší, budou nahrazeny soubory.
    • * _FORCE_REFRESH -soubory existující sestavení přepsány bez ohledu na jejich číslo verze.
  • pszManifestFilePath - řetězec směřující k propojené dynamické knihovny (DLL) obsahující manifest sestavení. Ostatní soubory sestavení musí být umístěn ve stejném adresáři jako knihovna DLL, který obsahuje manifest sestavení.
  • pRefData - ukazatel FUSION_INSTALL_REFERENCE označuje aplikace, jejichž jménem je nainstalována sestavení. Ačkoli to není doporučeno, tento parametr může být null, ale to ponechá bez aplikace odkaz sestavení.

Rozhraní IAssemblyName

Rozhraní IAssemblyName představuje název sestavení. Název sestavení obsahuje předem stanovených páry název hodnota. Název sestavení je podrobně popsány v sadě SDK pro rozhraní.NET Framework.
[        local,
object,
uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
pointer_default(unique)
]
interface IAssemblyName: IUnknown

Instance IAssemblyName je získáno voláním rozhraní CreateAssemblyNameObject API:
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 - řetězec představující název sestavení nebo sestavení úplný odkaz, který je určen parametr dwFlags. Řetězcové vyjádření může být null.
  • parametr dwFlags - nula nebo více bitů, které jsou definovány v CREATE_ASM_NAME_OBJ_FLAGS výčtu.
  • pvReserved - musí být null.

CREATE_ASM_NAME_OBJ_FLAGS výčet

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

Výčtu ASM_NAME

ID vlastnosti výčtu ASM_NAME popisuje platné názvy pro dvojice název hodnota v název sestavení. Naleznete v sadě SDK rozhraní.NET Framework pro 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á dvojici název hodnota název sestavení nebo, pokud pár název hodnota se stejným názvem již existuje, upraví nebo odstraní hodnotu z dvojice název hodnota.
    HRESULT SetProperty(        [in]    DWORD  PropertyId, 
[in] LPVOID pvProperty,
[in] DWORD cbProperty);

Parametry jsou definovány následovně:
  • Hodnota_vlastnosti - Identifikátor představující část dvojice název hodnota, která je chcete přidat nebo změnit název. Platnou vlastnost 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 nulová, pár název hodnota je odebrán z názvu sestavení.

Metoda IAssemblyName::GetProperty

Metoda IAssemblyName::GetProperty načte hodnotu z dvojice název hodnota v název sestavení, který určuje název.
    HRESULT GetProperty(        [in]         DWORD    PropertyId, 
[out] LPVOID pvProperty,
[in, out] LPDWORD pcbProperty);

Parametry jsou definovány následovně:
  • Hodnota_vlastnosti - Identifikátor, který představuje název dvojice název hodnota, jejíž hodnota má být načtena. Zadaná vlastnost 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.

Metoda IAssemblyName::Finalize

Metoda IAssemblyName::Finalize zablokuje název sestavení. Další volání IAssemblyName::SetProperty po tato metoda byla volána úspěšní.
HRESULT Finalize();

Metoda IAssemblyName::GetDisplayName

Metoda IAssemblyName::GetDisplayName vrátí řetězec představující název sestavení.
    HRESULT  GetDisplayName(        [out]       LPOLESTR  szDisplayName,
[in, out] LPDWORD pccDisplayName,
[in] DWORD dwDisplayFlags);

Parametry jsou definovány následovně:
  • szDisplayName - ukazatel do vyrovnávací paměti, který obsahuje zobrazovaný název. Zobrazovaný název 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 -jako část zobrazované jméno obsahuje číslo verze.
    • * _CULTURE -obsahuje jazykové verze.
    • * _PUBLIC_KEY_TOKEN -obsahuje token veřejného klíče.
    • * _PUBLIC_KEY -obsahuje veřejný klíč.
    • * _Vl -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, který obsahuje název součástí názvu sestavení.

Metoda IAssemblyName::GetVersion

Metoda IAssemblyName::GetVersion vrátí verze součástí názvu sestavení.
HRESULT GetVersion(        [out] LPDWORD pdwVersionHi,
[out] LPDWORD pdwVersionLow);

Parametry jsou definovány následovně:
  • pdwVersionHi - ukazatel na DWORD, který obsahuje horní 32 bity číslo verze.
  • pdwVersionLow - ukazatel na DWORD, které obsahují číslo verze dolní 32 bity.

Metoda IAssemblyName::IsEqual

IAssemblyName::IsEqual metoda porovnává na jiné názvy sestavení název sestavení.
    HRESULT IsEqual(        [in] IAssemblyName *pName,
[in] DWORD dwCmpFlags);

Parametry jsou definovány následovně:
  • pName - název sestavení pro porovnání.
  • dwCmpFlags - Určuje, která část název sestavení pro použití v porovnání.
Hodnoty jsou jedna 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 se neshodují.

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 Funkce 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í v mezipaměti GAC.
  • parametr dwFlags - přesně jeden bit z výčtu ASM_CACHE_FLAGS .
  • pvReserved - musí být NULL.

ASM_CACHE_FLAGS výčtu.

Výčet ASM_CACHE_FLAGS obsahuje následující hodnoty:
  • ASM_CACHE_ZAP - výčet mezipaměti předkompilovaných sestavení pomocí Ngen.exe.
  • ASM_CACHE_GAC - vytvoří výčet GAC.
  • ASM_CACHE_DOWNLOAD - vytvoří výčet sestavení, které byly staženy na požádání nebo která byla vytvořena stínová kopie.
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 vytvoří 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é obdrží ukazatele rozhraní k názvu sestavení další sestavení, který je ve výčtu.
  • parametr dwFlags - musí být nula.

Rozhraní IInstallReferenceItem

Rozhraní IInstallReferenceItem představuje odkaz, který byl nastaven na sestavení v mezipaměti GAC. 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í strukturu 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ěť je přidělen metodou GetReference a je uvolněna po vydání IInstallReferenceItem . Volající nesmí přechovávat odkaz na této vyrovnávací paměti po uvolnění objektu 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 mezipaměti GAC.

Poznámka: odkazy, které patří k sestavení jsou uzamčeny pro změny tyto odkazy jsou vytváření výčtů.
[        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ší informace o 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: -další položka byla úspěšně vrácena.
  • S_FALSE: -žádné další položky.

GetCachePath rozhraní API

GetCachePath API vrátí umístění úložiště v mezipaměti GAC.
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
Parametry jsou definovány následovně:
  • dwCacheFlags - přesně jeden bitů definované ve výčtu ASM_CACHE_FLAGS .
  • pwzCachePath - ukazatel do vyrovnávací paměti, který má obdržet cestu GAC jako řetězec znaků Unicode.
  • pcchPath - délka vyrovnávací paměti pwszCachePath 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í kontrola: 20. 1. 2017 - Revize: 1

Váš názor