DOC: Global Assembly Cache (GAC) API sono documentati non nella documentazione .NET Framework Software Development Kit (SDK) (informazioni in lingua INGLESE)

Traduzione articoli Traduzione articoli
Identificativo articolo: 317540 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Il codice nativo application programming interface (API) che consentono di interagire con la Global Assembly Cache (GAC) non sono documentate nella documentazione di .NET Framework Software Development Kit (SDK).

Informazioni

attenzione : non utilizzare queste API nell'applicazione per eseguire associazioni di assembly o per verificare la presenza di assembly o altri runtime, sviluppo o le operazioni della fase di progettazione. Solo strumenti di amministrazione e programmi di installazione Ŕ necessario utilizzare queste API. Se si utilizza nella Global Assembly Cache, questo direttamente espone l'applicazione fragility associazione di assembly o potrebbe verificare il funzionamento in modo non corretto nelle versioni future di .NET Framework dell'applicazione.

CAG memorizza gli assembly condivisi tra tutte le applicazioni in un computer. Il percorso di archiviazione effettivo struttura della Global Assembly Cache non Ŕ documentata ed Ŕ soggette a modifiche nelle versioni future di .NET Framework e il sistema operativo Microsoft Windows.

L'unico metodo supportato per gli assembly di accesso nella GAC Ŕ mediante le API sono documentati in questo articolo.

La maggior parte delle applicazioni non sono necessario utilizzare queste API, poichÚ l'associazione di assembly viene eseguita automaticamente da common language runtime. Solo i programmi di installazione personalizzati o gli strumenti di gestione Ŕ necessario utilizzare queste API. Microsoft Windows Installer dispone del supporto nativo per l'installazione di assembly nella GAC.

Per ulteriori informazioni sull'assembly e Global Assembly Cache, vedere .NET Framework SDK.

Utilizzare l'API di GAC nei seguenti scenari:
  • Quando si installa un assembly nella GAC.
  • Quando si elimina un assembly dalla GAC.
  • Quando Ŕ possibile esportare un assembly dalla GAC.
  • Quando Ŕ necessario enumerare assembly disponibili nella Global Assembly Cache.
Nota : CoInitialize(Ex) deve essere chiamato prima di utilizzare le funzioni e le interfacce descritte in questa specifica.

IAssemblyCache interfaccia

L'interfaccia di IAssemblyCache Ŕ l'interfaccia di primo livello che fornisce l'accesso a GAC.

Per ottenere un'istanza di CreateAssemblyCache API, chiamare CreateAssemblyCache API, come illustrato di seguito:
STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); 
I parametri sono definiti come segue:
  • ppAsmCache - puntatore per restituire IAssemblyCache
  • dwReserved

Struttura FUSION_INSTALL_REFERENCE

La struttura FUSION_INSTALL_REFERENCE rappresenta un riferimento che viene eseguito quando un assembly nella Global Assembly Cache Ŕ installata un'applicazione.
    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;
				
i campi della struttura sono definiti come segue:
  • cbSize - dimensione della struttura espresse in byte.
  • dwFlags - riservato, deve essere zero.
  • guidScheme - l'entitÓ che aggiunge il riferimento.
  • szIdentifier - stringa univoco che identifica l'applicazione installata l'assembly.
  • szNonCannonicalData - stringa che viene riconosciuta solo dall'entitÓ che aggiunge il riferimento. Nella Global Assembly Cache vengono memorizzate solo questa stringa.
Valori possibili per il campo guidScheme possono essere una delle seguenti:
  • FUSION_REFCOUNT_MSI_GUID - l'assembly si fa riferimento un'applicazione che Ŕ stata installata mediante Windows Installer. Il campo szIdentifier Ŕ impostato su MSI , e szNonCannonicalData Ŕ impostata a Windows Installer . Questo schema deve essere utilizzato solo da Windows Installer se stesso.
  • FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID - l'assembly si fa riferimento un'applicazione visualizzato nell'elenco Installazione applicazioni . Il campo szIdentifier Ŕ il token utilizzato per registrare l'applicazione con Installazione applicazioni .
  • FUSION_REFCOUNT_FILEPATH_GUID - l'assembly si fa riferimento un'applicazione che Ŕ rappresentata da un file nel file system. Il campo szIdentifier Ŕ il percorso al file.
  • FUSION_REFCOUNT_OPAQUE_STRING_GUID - l'assembly si fa riferimento un'applicazione che solo Ŕ rappresentata da una stringa opaca. Il szIdentifier Ŕ questa stringa opaca. Nella Global Assembly Cache non esegue l'esistenza di controllo dei riferimenti opachi quando si rimuove questo.

Struttura ASSEMBLY_INFO

La struttura ASSEMBLY_INFO rappresenta informazioni su un assembly nella cache dell'assembly.

I campi della struttura sono definiti come segue:
  • cbAssemblyInfo - dimensioni della struttura espresse in byte. Consente di aggiunte la struttura in versione futura di .NET Framework.
  • dwAssemblyFlags - indica uno o pi¨ bit ASSEMBLYINFO_FLAG_ * .
  • uliAssemblySizeInKB - la dimensione dei file che costituiscono l'assembly in kilobyte (KB).
  • pszCurrentAssemblyPathBuf - un puntatore a un buffer di stringa che contiene il percorso della directory che contiene i file che compongono l'assembly corrente. Il percorso deve terminare con zero.
  • cchBuf - dimensione di buffer che il campo pszCurrentAssemblyPathBug punta a.
dwAssemblyFlags possono avere uno dei seguenti valori seguenti:
  • ASSEMBLYINFO_FLAG__INSTALLED - indica che l'assembly Ŕ installato. Impostare sempre la versione corrente di .NET Framework.
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT - non impostate nella versione corrente di .NET Framework.

Metodo IAssemblyCache::UninstallAssembly

Il metodo IAssemblyCache::UninstallAssembly rimuove un riferimento a un assembly dalla GAC. Se altre applicazioni non altri riferimenti all'assembly, i file che costituiscono l'assembly vengono rimossi dalla GAC.
    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );

				
I parametri sono definiti come segue:
  • dwFlags - Nessun flag definiti. Deve essere uguale a zero.
  • pszAssemblyName - il nome dell'assembly. Unicode a due punte su zero stringa.
  • pRefData - puntatore a una struttura FUSION_INSTALL_REFERENCE . Sebbene questa non operazione Ŕ consigliata, questo parametro pu˛ essere null. L'assembly Ŕ installato senza un riferimento all'applicazione, oppure sono stati eliminati tutti i riferimenti applicazione esistenti.
  • pulDisposition - puntatore a un valore integer che indica l'azione eseguita dalla funzione.
Nota : se pulDisposition non Ŕ null, pulDisposition contiene uno dei valori seguenti:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED - l'assembly file sono stati rimossi dalla GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE - un'applicazione utilizza l'assembly. Questo valore viene restituito in Microsoft Windows 95 e Microsoft Windows 98.
  • non esiste IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED - l'assembly nella Global Assembly Cache.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING - non utilizzato.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES - l'assembly non Ŕ stato rimosso dalla GAC perchÚ esiste un altro riferimento di applicazione.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND - il riferimento specificato nel pRefData non trovato nella GAC.
I valori restituiti sono definiti come segue:
  • S_OK - l'assembly Ŕ stato disinstallato.
  • S_FALSE - completata l'operazione, ma l'assembly non Ŕ stato rimosso dalla GAC. Il motivo Ŕ descritto in pulDisposition .

Metodo IAssemblyCache::QueryAssemblyInfo

Il metodo di IAssemblyCache::QueryAssemblyInfo recupera informazioni su un assembly dalla GAC.
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
				
I parametri sono definiti come segue:
  • dwFlags - uno dei QUERYASMINFO_FLAG_VALIDATE o QUERYASMINFO_FLAG_GETSIZE :
    • * _VALIDATE -esegue la convalida dei file nella cache globale con manifesto dell'assembly, tra cui la verifica dell'hash e la verifica della firma nome sicuro.
    • * _GETSIZE -restituisce la dimensione di tutti i file nell'assembly (footprint del disco). Se non viene specificato, il campo ASSEMBLY_INFO::uliAssemblySizeInKB non viene modificato.
  • pszAssemblyName - nome dell'assembly che viene eseguita una query.
  • pAsmInfo - puntatore alla struttura ASSEMBLY_INFO restituita.

Metodo IAssemblyCache::InstallAssembly

Il metodo di IAssemblyCache::InstallAssembly aggiunge un nuovo assembly nella GAC. L'assembly deve essere mantenuta nel file system e viene copiato nella Global Assembly Cache.
    HRESULT InstallAssembly( // If you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );
				
i parametri sono definiti come segue:
  • Ŕ possibile specificare dwFlags - al massimo uno dei bit di valori IASSEMBLYCACHE_INSTALL_FLAG_ * :
    • * _REFRESH - se l'assembly Ŕ giÓ installato nella Global Assembly Cache e i numeri di versione del file dell'assembly da installare sono lo stesso o in un secondo momento, i file vengono sostituiti.
    • * _FORCE_REFRESH -vengono sovrascritti i file di un assembly esistente indipendentemente dal loro numero di versione.
  • pszManifestFilePath - stringa che fa riferimento la libreria con collegamento dinamico (DLL) che contiene il manifesto dell'assembly. Altri file di assembly devono risiedere nella stessa directory della DLL che contiene il manifesto dell'assembly.
  • pRefData - puntatore a un FUSION_INSTALL_REFERENCE che indica l'applicazione per conto del quale l'assembly Ŕ installato. Sebbene questa non operazione Ŕ consigliata, questo parametro pu˛ essere null, ma in questo modo l'assembly senza riferimento qualsiasi applicazione.

Interfaccia IAssemblyName

L'interfaccia IAssemblyName rappresenta un nome di assembly. Nome di un assembly include un insieme predeterminato di coppie nome / valore. Il nome dell'assembly Ŕ descritto in dettaglio in .NET Framework SDK.
[
        local,
        object,
        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
        pointer_default(unique)
]
interface IAssemblyName: IUnknown
				
Un'istanza di IAssemblyName Ŕ ottenuta mediante una chiamata l' API CreateAssemblyNameObject :
STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved);
i parametri sono definiti come segue:
  • ppAssemblyNameObj - puntatore a una posizione che riceve il puntatore IAssemblyName creato in memoria.
  • szAssemblyName - una rappresentazione di stringa del nome dell'assembly o di un riferimento completo dell'assembly Ŕ determinato dal dwFlags . La rappresentazione di stringa pu˛ essere null.
  • dwFlags - zero o pi¨ del bit sono definiti nell'enumerazione CREATE_ASM_NAME_OBJ_FLAGS .
  • pvReserved - deve essere null.

Enumerazione CREATE_ASM_NAME_OBJ_FLAGS

L'enumerazione CREATE_ASM_NAME_OBJ_FLAGS contiene i valori seguenti:
  • CANOF_PARSE_DISPLAY_NAME - se questo flag viene specificato, il parametro di szAssemblyName Ŕ un nome completo dell'assembly e viene analizzato per le singole proprietÓ. Se non viene specificato il flag, szAssemblyName Ŕ la parte di "Nome" del nome dell'assembly.
  • CANOF_SET_DEFAULT_VALUES - se questo flag Ŕ di proprietÓ, determinate, ad esempio architettura del processore, vengono impostate sui valori predefiniti.
    typedef enum {
         CANOF_PARSE_DISPLAY_NAME = 0x1,
         CANOF_SET_DEFAULT_VALUES = 0x2
    } CREATE_ASM_NAME_OBJ_FLAGS;
				

Enumerazione ASM_NAME

L'ID di proprietÓ di enumerazione ASM_NAME vengono descritti i nomi delle coppie nome / valore nome di un assembly dei validi. Vedere .NET Framework SDK per una descrizione di queste proprietÓ.
    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;
				

Metodo IAssemblyName::SetProperty

Il metodo IAssemblyName::SetProperty aggiunge una coppia nome / valore il nome dell'assembly oppure, se una coppia nome / valore con lo stesso nome esiste giÓ, modifica o Elimina il valore di una coppia nome / valore.
    HRESULT SetProperty(
        [in]    DWORD  PropertyId, 
        [in]    LPVOID pvProperty,
        [in]    DWORD  cbProperty);
				
I parametri sono definiti come segue:
  • PropertyId - l'ID rappresenta la parte del nome della coppia nome / valore da aggiungere o da modificare. ID di proprietÓ valido sono definiti nell'enumerazione ASM_NAME .
  • pvProperty - un puntatore a un buffer che contiene il valore della proprietÓ.
  • cbProperty - la lunghezza di buffer pvProperty in byte. Se cbProperty Ŕ uguale a zero, la coppia nome / valore viene rimosso dal nome dell'assembly.

Metodo IAssemblyName::GetProperty

Il metodo IAssemblyName::GetProperty recupera il valore di una coppia nome / valore nel nome dell'assembly che specifica il nome.
    HRESULT GetProperty(
        [in]         DWORD    PropertyId, 
        [out]        LPVOID   pvProperty,
        [in, out]    LPDWORD  pcbProperty);
				
I parametri sono definiti come segue:
  • PropertyId - l'ID che rappresenta il nome della coppia nome / valore cui valore Ŕ da recuperare. ID di proprietÓ specificata sono definiti nell'enumerazione ASM_NAME .
  • pvProperty - un puntatore a un buffer che deve contenere il valore della proprietÓ.
  • cbProperty - la lunghezza di buffer pvProperty , in byte.

Metodo IAssemblyName::Finalize

Il metodo IAssemblyName::Finalize blocca un nome di assembly. Ulteriori chiamate per IAssemblyName::SetProperty sono non riusciti in dopo aver chiamato questo metodo.
HRESULT Finalize();

Metodo IAssemblyName::GetDisplayName

Il metodo di IAssemblyName::GetDisplayName restituisce una rappresentazione in forma di stringa del nome dell'assembly.
    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);
				
I parametri sono definiti come segue:
  • szDisplayName - un puntatore a un buffer che Ŕ di contenere il nome visualizzato. Il nome visualizzato viene restituito in Unicode.
  • pccDisplayName - la dimensione del buffer in caratteri (in input). Lunghezza del nome visualizzato restituito (in reso).
  • dwDisplayFlags - una o pi¨ dei bit definiti nell'enumerazione ASM_DISPLAY_FLAGS :
    • * _VERSION -include il numero di versione come parte del nome visualizzato.
    • * _CULTURE -include le impostazioni cultura.
    • * _PUBLIC_KEY_TOKEN -include il token di chiave pubblica.
    • * _PUBLIC_KEY -includono la chiave pubblica.
    • * _CUSTOM -include la parte del nome dell'assembly personalizzata.
    • * _PROCESSORARCHITECTURE -include l'architettura del processore.
    • * _LANGUAGEID -include l'ID lingua.
    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;
				

Metodo IAssemblyName::GetName

Il metodo IAssemblyName::GetName restituisce la parte di nome del nome dell'assembly.
    HRESULT GetName(
        [in, out] LPDWORD lpcwBuffer,
        [out] WCHAR *pwzName);
				
I parametri sono definiti come segue:
  • lpcwBuffer - dimensione di buffer pwszName (in input). Lunghezza del nome (in reso).
  • pwszName - puntatore al buffer che Ŕ di contenere la parte del nome del nome assembly.

Metodo IAssemblyName::GetVersion

Il metodo IAssemblyName::GetVersion restituisce la parte di versione del nome dell'assembly.
HRESULT GetVersion(
        [out] LPDWORD pdwVersionHi,
        [out] LPDWORD pdwVersionLow);
				
I parametri sono definiti come segue:
  • pdwVersionHi - puntatore a un DWORD che contenga 32 bit del numero di versione superiore.
  • pdwVersionLow - puntatore a un DWORD che contengono i 32 bit inferiore del numero di versione.

Metodo IAssemblyName::IsEqual

Il metodo di IAssemblyName::IsEqual confronta il nome dell'assembly ai nomi di un altro assembly.
    HRESULT IsEqual(
        [in] IAssemblyName *pName,
        [in] DWORD dwCmpFlags);
				
I parametri sono definiti come segue:
  • pName - nome dell'assembly da confrontare con.
  • dwCmpFlags - indica quale parte del nome dell'assembly da utilizzare nel confronto.
I valori sono una o pi¨ dei bit definiti nell'enumerazione 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;                       
				
i valori restituiti sono i seguenti:
  • S_OK: -I nomi corrispondono in base ai criteri di confronto.
  • S_FALSE: -I nomi non corrispondono.

Metodo IAssemblyName::Clone

Il metodo IAssemblyName::Clone crea una copia di un nome di assembly.
    HRESULT Clone(
        [out] IAssemblyName **pName);
				

Interfaccia IAssemblyEnum

L'interfaccia IAssemblyEnum enumera gli assembly nella Global Assembly Cache.
 [
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
				
Per ottenere un'istanza di CreateAssemblyEnum API, chiamare CreateAssemblyNameObject API, come illustrato di seguito:
STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
I parametri sono definiti come segue:
  • pEnum - puntatore a una posizione che contiene il puntatore IAssemblyEnum in memoria.
  • pUnkReserved - deve essere null.
  • pName - nome di assembly viene utilizzata per filtrare l'enumerazione. Pu˛ essere null per enumerare tutti gli assembly nella Global Assembly Cache.
  • dwFlags - esatta di un bit dall'enumerazione ASM_CACHE_FLAGS .
  • pvReserved - deve essere NULL.

Enumerazione ASM_CACHE_FLAGS

L'enumerazione ASM_CACHE_FLAGS contiene i valori seguenti:
  • ASM_CACHE_ZAP - enumera la cache di assembly precompilati utilizzando Ngen.exe.
  • ASM_CACHE_GAC - enumera nella Global Assembly Cache.
  • ASM_CACHE_DOWNLOAD - enumera gli assembly che sono stato scaricato su richiesta o che sono state copia shadow.
IAssemblyName::GetDisplayName
typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;
				

Metodo IAssemblyEnum::GetNextAssembly

Il metodo di IAssemblyEnum::GetNextAssembly enumera gli assembly nella Global Assembly Cache.
    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );
				
I parametri sono definiti come segue:
  • pvReserved - deve essere null.
  • ppName - puntatore a una posizione che riceverÓ il puntatore di interfaccia per il nome di assembly dell'assembly successivo che viene enumerata in memoria.
  • dwFlags - deve essere zero.

Interfaccia IInstallReferenceItem

L'interfaccia IInstallReferenceItem rappresenta un riferimento che Ŕ stato impostato su un assembly nella Global Assembly Cache. Le istanze di IInstallReferenceIteam vengono restituite dall'interfaccia IInstallReferenceEnum .
[
        local,
        object,
        uuid(582dac66-e678-449f-aba6-6faaec8a9394),
        pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
				

Metodo IInstallReferenceItem::GetReference

Il metodo di IInstallReferenceItem::GetReference restituisce una struttura FUSION_INSTALL_REFERENCE .
    HRESULT GetReference
    (
    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,
    [in]  DWORD dwFlags,
    [in]  LPVOID pvReserved
    );
				
I parametri sono definiti come segue:
  • ppRefData - puntatore a una struttura FUSION_INSTALL_REFERENCE . La memoria viene allocata dal metodo GetReference e viene liberata quando viene rilasciato IInstallReferenceItem . I chiamanti non necessario a tenere un riferimento a questo buffer dopo il rilascio dell'oggetto IInstallReferenceItem .
  • dwFlags - deve essere zero.
  • pvReserved - deve essere null.

IInstallReferenceEnum interfaccia

L'interfaccia IInstallReferenceEnum enumera tutti i riferimenti impostati in un assembly nella Global Assembly Cache.

Nota : riferimenti che appartengono all'assembly vengono bloccati per le modifiche mentre questi riferimenti enumerati.
[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
				
Per ottenere un'istanza di CreateInstallReferenceEnum API, chiamare CreateInstallReferenceEnum API, come illustrato di seguito:
STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
I parametri sono definiti come segue:
  • ppRefEnum - un puntatore a una posizione di memoria che riceve il puntatore IInstallReferenceEnum .
  • pName - nome dell'assembly per il quale vengono enumerati i riferimenti.
  • dwFlags - deve essere zero.
  • pvReserved - deve essere null.

Metodo IInstallReferenceEnum::GetNextInstallReferenceItem

IInstallReferenceEnum::GetNextInstallReferenceItem restituisce le informazioni di riferimento successiva per un assembly.
    HRESULT GetNextInstallReferenceItem
            (
            [out] IInstallReferenceItem **ppRefItem,
            [in]  DWORD dwFlags,
            [in]  LPVOID pvReserved
            );
				
I parametri sono definiti come segue:
  • ppRefItem - puntatore a una posizione che riceve il puntatore IInstallReferenceItem in memoria.
  • dwFlags - deve essere zero.
  • pvReserved - deve essere null.
I valori restituiti sono i seguenti:
  • S_OK: -l'elemento successivo Ŕ ha restituito correttamente.
  • S_FALSE: -non pi¨ elementi.

GetCachePath API

GetCachePath API restituisce la posizione di archiviazione della Global Assembly Cache.
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
I parametri sono definiti come segue:
  • dwCacheFlags - esattamente uno dei bit definiti nell'enumerazione ASM_CACHE_FLAGS .
  • pwzCachePath - puntatore a un buffer che riceverÓ il percorso della Global Assembly Cache come una stringa Unicode.
  • pcchPath - lunghezza del buffer pwszCachePath , in caratteri 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); ")
				

ProprietÓ

Identificativo articolo: 317540 - Ultima modifica: venerdý 4 aprile 2003 - Revisione: 3.0
Le informazioni in questo articolo si applicano a:
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
Chiavi:á
kbmt kbbug kbdocerr kbpending KB317540 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 317540
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

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