Você está offline; aguardando reconexão
Entrar

DOC: Global assembly cache (GAC) APIs são não documentadas na documentação .NET Framework Software Development Kit (SDK)

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

317540
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.
Sumário
As código nativo aplicativo interfaces de programação (APIs) que permitem a interação com o cache de assembly global (GAC) não são documentadas na documentação .NET Framework Software Development Kit (SDK).
Mais Informações
cuidado : não usar essas APIs em seu aplicativo para executar ligações de assembly ou para testar a presença de módulos (assemblies) ou outros tempo de execução, desenvolvimento ou operações de tempo de design. Apenas ferramentas administrativas e programas de instalação devem usar essas APIs. Se você usar o GAC, isso diretamente expõe seu aplicativo a fragilidade de ligação de assembly ou pode fazer com que seu aplicativo não funcionem corretamente em versões futuras do .NET Framework.

O GAC armazena os assemblies que são compartilhados entre todos os aplicativos em um computador. O local de armazenamento real e estrutura de GAC não documentada e está sujeito a alterações em versões futuras do .NET Framework e o sistema operacional Microsoft Windows.

O único método suportado para acesso assemblies no GAC é através de APIs documentadas neste artigo.

A maioria dos aplicativos não é necessário que usar essas APIs porque o assembly de ligação é executado automaticamente pelo common language runtime. Somente programas de instalação personalizado ou ferramentas de gerenciamento devem usar essas APIs. Microsoft Windows Installer tem suporte nativo para instalar assemblies no GAC.

Para obter mais informações sobre assemblies e o GAC, consulte o SDK do .NET Framework.

Use a API de GAC nas seguintes situações:
  • Quando você instalar um assembly no GAC.
  • Quando você remover um assembly do GAC.
  • Quando você exportar um assembly do GAC.
  • Quando você enumerar os assemblies que estão disponíveis no GAC.
Observação : CoInitialize(Ex) deve ser chamado antes de usar qualquer das funções e interfaces que são descritos nesta especificação.

Interface IAssemblyCache

A interface IAssemblyCache é a interface de nível superior que fornece acesso ao GAC.

Para obter uma instância de CreateAssemblyCache API, chamar CreateAssemblyCache API, da seguinte maneira:
STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); 
parâmetros estão definidos como segue:
  • ppAsmCache - ponteiro para retornar IAssemblyCache
  • dwReserved

Estrutura FUSION_INSTALL_REFERENCE

A estrutura FUSION_INSTALL_REFERENCE representa uma referência é feita quando um aplicativo tiver instalado um assembly no 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;				
os campos da estrutura estão definidos como segue:
  • cbSize - O tamanho da estrutura em bytes.
  • dwFlags - reservado, deve ser zero.
  • guidScheme - A entidade que adiciona a referência.
  • szIdentifier - uma seqüência exclusiva que identifica o aplicativo que instalou o assembly.
  • szNonCannonicalData - uma seqüência que só é compreendida pela entidade que adiciona a referência. O GAC somente armazena essa seqüência de caracteres.
Valores possíveis para o campo guidScheme podem ser uma das seguintes opções:
  • FUSION_REFCOUNT_MSI_GUID - O assembly é referenciado por um aplicativo que foi instalado usando o Windows Installer. O campo szIdentifier é definido como MSI e szNonCannonicalData é definido para Windows Installer . Este esquema deve apenas ser usado pelo Windows Installer propriamente dito.
  • FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID - O assembly é referenciado por um aplicativo que aparece em Adicionar ou remover programas . O campo szIdentifier é o token que é usado para registrar o aplicativo com Adicionar ou remover programas .
  • FUSION_REFCOUNT_FILEPATH_GUID - O assembly é referenciado por um aplicativo que é representado por um arquivo no sistema de arquivos. O campo szIdentifier é o caminho para este arquivo.
  • FUSION_REFCOUNT_OPAQUE_STRING_GUID - O assembly é referenciado por um aplicativo que só é representado por uma seqüência de caracteres opaca. szIdentifier é essa seqüência opaca. O GAC não executa verificando opacas referências quando você remove esta existência.

Estrutura ASSEMBLY_INFO

A estrutura ASSEMBLY_INFO representa informações sobre um assembly no cache de assembly.

Os campos da estrutura são definidos da seguinte maneira:
  • cbAssemblyInfo - tamanho da estrutura em bytes. Permite adições à estrutura na versão futura do .NET Framework.
  • dwAssemblyFlags - indica um ou mais dos bits ASSEMBLYINFO_FLAG_ 1 .
  • uliAssemblySizeInKB - O tamanho dos arquivos que compõem o assembly em quilobytes (KB).
  • pszCurrentAssemblyPathBuf - um ponteiro para um buffer de seqüência de caracteres que contém o caminho atual da pasta que contém os arquivos que compõem o assembly. O caminho deve terminar com um zero.
  • cchBuf - tamanho do buffer que o campo pszCurrentAssemblyPathBug aponta para.
dwAssemblyFlags pode ter um dos seguintes valores:
  • ASSEMBLYINFO_FLAG__INSTALLED - indica que o assembly está realmente instalado. Sempre definido na versão atual do .NET Framework.
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT - nunca definido na versão atual do .NET Framework.

Método IAssemblyCache::UninstallAssembly

O método IAssemblyCache::UninstallAssembly remove uma referência a um assembly do GAC. Se outros aplicativos mantiverem não outras referências ao assembly, os arquivos que compõem o assembly são removidos do GAC.
    HRESULT UninstallAssembly(        [in] DWORD dwFlags,        [in] LPCWSTR pszAssemblyName,         [in] LPCFUSION_INSTALL_REFERENCE pRefData,         [out, optional] ULONG *pulDisposition        );				
Os parâmetros são definidos como:
  • dwFlags - sem sinalizadores definidos. Deve ser zero.
  • pszAssemblyName - O nome do assembly. Um Unicode finalizada zero seqüência de caracteres.
  • pRefData - um ponteiro para uma estrutura FUSION_INSTALL_REFERENCE . Embora não seja recomendado, este parâmetro pode ser nulo. O assembly está instalado sem uma referência de aplicativo, ou todas as referências existentes do aplicativo são perdidas.
  • pulDisposition - ponteiro para um inteiro que indica a ação que é executada pela função.
Observação : se pulDisposition não for nulo, pulDisposition contém um dos seguintes valores:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED - O assembly arquivos foram removidos do GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE - um aplicativo está usando o assembly. Esse valor é retornado no Microsoft Windows 95 e Microsoft Windows 98.
  • não existe IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED - O assembly no GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING - não usado.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES - O assembly não foi removido do GAC porque existe outra referência de aplicativo.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND - A referência que está especificada no pRefData não foi encontrado no GAC.
Os valores de retorno são definidos da seguinte maneira:
  • S_OK - O assembly foi desinstalado.
  • S_FALSE - A operação foi bem-sucedida, mas o assembly não foi removido do GAC. O motivo é descrito em pulDisposition .

Método IAssemblyCache::QueryAssemblyInfo

O método IAssemblyCache::QueryAssemblyInfo recupera informações sobre um assembly do GAC.
    HRESULT QueryAssemblyInfo(        [in] DWORD dwFlags,        [in] LPCWSTR pszAssemblyName,        [in, out] ASSEMBLY_INFO *pAsmInfo        );				
Os parâmetros são definidos como:
  • dwFlags - um dos QUERYASMINFO_FLAG_VALIDATE ou QUERYASMINFO_FLAG_GETSIZE :
    • * _VALIDATE -executa a validação dos arquivos no GAC contra o manifesto do assembly, incluindo verificação de hash e verificação de assinatura de nome de alta segurança.
    • * _GETSIZE -retorna o tamanho de todos os arquivos no assembly (superfície de disco). Se isso não for especificado, o campo ASSEMBLY_INFO::uliAssemblySizeInKB não será modificado.
  • pszAssemblyName - nome do assembly que é consultado.
  • pAsmInfo - ponteiro para a estrutura ASSEMBLY_INFO retornada.

Método IAssemblyCache::InstallAssembly

O método IAssemblyCache::InstallAssembly adiciona um novo assembly no GAC. O assembly deve ser mantido no sistema de arquivos e é copiado no GAC.
    HRESULT InstallAssembly( // If you use this, fusion will do the streaming & commit.        [in] DWORD dwFlags,        [in] LPCWSTR pszManifestFilePath,         [in] LPCFUSION_INSTALL_REFERENCE pRefData        );				
os parâmetros são definidos da seguinte maneira:
  • dwFlags - no máximo, um dos bits dos valores IASSEMBLYCACHE_INSTALL_FLAG_ 1 pode ser especificado:
    • * _REFRESH - se o assembly já está instalado no GAC e os arquivo os números de versão do assembly que está sendo instalado são os mesmos ou posterior, os arquivos são substituídos.
    • * _FORCE_REFRESH -o de um assembly existente são sobrescritos independentemente de seu número de versão.
  • pszManifestFilePath - uma seqüência de caracteres apontando para a biblioteca vinculada dinâmico (DLL) que contém o manifesto do assembly. Outros arquivos assembly devem residir no mesmo diretório que a DLL que contém o manifesto do assembly.
  • pRefData - um ponteiro para um FUSION_INSTALL_REFERENCE que indica o aplicativo em cujo nome o assembly está sendo instalado. Embora isso não é recomendado, esse parâmetro pode ser nulo, mas isso deixa o assembly sem qualquer referência de aplicativo.

Interface IAssemblyName

A interface IAssemblyName representa um nome de assembly. Um nome de assembly inclui um conjunto predeterminado de pares nome-valor. O nome do assembly é descrito detalhadamente no SDK do .NET Framework.
[        local,        object,        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),        pointer_default(unique)]interface IAssemblyName: IUnknown				
Uma instância de IAssemblyName é obtida chamando a API CreateAssemblyNameObject :
STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved);
os parâmetros estão definidos como segue:
  • ppAssemblyNameObj - ponteiro para um local memória que recebe o ponteiro IAssemblyName que é criado.
  • szAssemblyName - uma representação de seqüência de caracteres de nome de assembly ou de uma referência de assembly completo é determinada pelo dwFlags . A representação de seqüência de caracteres pode ser nula.
  • dwFlags - zero ou mais dos bits definidos na enumeração CREATE_ASM_NAME_OBJ_FLAGS .
  • pvReserved - deve ser nulo.

Enumeração CREATE_ASM_NAME_OBJ_FLAGS

A enumeração CREATE_ASM_NAME_OBJ_FLAGS contém os seguintes valores:
  • CANOF_PARSE_DISPLAY_NAME - se esse sinalizador for especificado, o parâmetro szAssemblyName é um nome de assembly completo e é analisado para as propriedades individuais. Se o sinalizador não for especificado, szAssemblyName é a parte "Nome" do nome do assembly.
  • CANOF_SET_DEFAULT_VALUES - se esse sinalizador for especificadas, determinadas propriedades, tais como arquitetura do processador, são definidas para seus valores padrão.
    typedef enum {         CANOF_PARSE_DISPLAY_NAME = 0x1,         CANOF_SET_DEFAULT_VALUES = 0x2    } CREATE_ASM_NAME_OBJ_FLAGS;				

Enumeração ASM_NAME

A identificação de propriedade de enumeração ASM_NAME descreve os nomes válidos de pares nome-valor em um nome de assembly. Consulte o .NET Framework SDK para obter uma descrição dessas propriedades.
    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;				

Método IAssemblyName::SetProperty

O método IAssemblyName::SetProperty adiciona um par nome-valor ao nome do assembly ou, se um par nome-valor com o mesmo nome já existir, modifica ou exclui o valor de um par nome-valor.
    HRESULT SetProperty(        [in]    DWORD  PropertyId,         [in]    LPVOID pvProperty,        [in]    DWORD  cbProperty);				
Os parâmetros são definidos como:
  • PropertyId - A identificação que representa a parte de nome o par nome-valor que está a ser adicionado ou a ser modificada. Identificações de propriedade válidos são definidas na enumeração ASM_NAME .
  • pvProperty - um ponteiro para um buffer que contém o valor da propriedade.
  • cbProperty - O comprimento do buffer de pvProperty em bytes. Se cbProperty for zero, o par nome-valor será removido do nome do assembly.

Método IAssemblyName::GetProperty

O método IAssemblyName::GetProperty recupera o valor de um par nome-valor no nome do assembly que especifica o nome.
    HRESULT GetProperty(        [in]         DWORD    PropertyId,         [out]        LPVOID   pvProperty,        [in, out]    LPDWORD  pcbProperty);				
Os parâmetros são definidos como:
  • PropertyId - A identificação que representa o nome do par nome-valor cujo valor é a serem recuperados. Identificações de propriedade especificado são definidas na enumeração ASM_NAME .
  • pvProperty - um ponteiro para um buffer que deve conter o valor da propriedade.
  • cbProperty - O comprimento do buffer pvProperty , em bytes.

Método IAssemblyName::Finalize

O método IAssemblyName::Finalize congela um nome de assembly. Chamadas adicionais para IAssemblyName::SetProperty são malsucedidas após esse método foi chamado.
HRESULT Finalize();

Método IAssemblyName::GetDisplayName

O método IAssemblyName::GetDisplayName retorna uma representação de seqüência de caracteres de nome de assembly.
    HRESULT  GetDisplayName(        [out]       LPOLESTR  szDisplayName,        [in, out]   LPDWORD   pccDisplayName,        [in]        DWORD     dwDisplayFlags);				
Os parâmetros são definidos como:
  • szDisplayName - um ponteiro para um buffer que é conter o nome de exibição. O nome de exibição é retornado em Unicode.
  • pccDisplayName - O tamanho do buffer em caracteres (na entrada). O comprimento do nome retornado exibição (no retorno).
  • dwDisplayFlags - um ou mais bits definidos na enumeração ASM_DISPLAY_FLAGS :
    • * _VERSION -inclui o número de versão como parte do nome para exibição.
    • * _CULTURE -inclui a cultura.
    • * _PUBLIC_KEY_TOKEN -inclui o token de chave público.
    • * _PUBLIC_KEY -inclui a chave pública.
    • * _CUSTOM -inclui a parte de nome de assembly personalizada.
    • * _PROCESSORARCHITECTURE -inclui a arquitetura do processador.
    • * _LANGUAGEID -inclui a identificação de idioma.
    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;				

Método IAssemblyName::GetName

O método IAssemblyName::GetName retorna a parte do nome do nome do assembly.
    HRESULT GetName(        [in, out] LPDWORD lpcwBuffer,        [out] WCHAR *pwzName);				
Os parâmetros são definidos como:
  • lpcwBuffer - tamanho do buffer pwszName (na entrada). Comprimento do nome (no retorno).
  • pwszName - ponteiro para o buffer é conter a parte do nome do nome do assembly.

Método IAssemblyName::GetVersion

O método IAssemblyName::GetVersion retorna a parte da versão do nome do assembly.
HRESULT GetVersion(        [out] LPDWORD pdwVersionHi,        [out] LPDWORD pdwVersionLow);				
Os parâmetros são definidos como:
  • pdwVersionHi - ponteiro para uma DWORD que contém os 32 bits superiores do número de versão.
  • pdwVersionLow - ponteiro para uma DWORD que contêm os 32 bits inferiores do número de versão.

Método IAssemblyName::IsEqual

O método IAssemblyName::IsEqual compara o nome do assembly para outro nomes assembly.
    HRESULT IsEqual(        [in] IAssemblyName *pName,        [in] DWORD dwCmpFlags);				
Os parâmetros são definidos como:
  • pName - O nome do assembly a ser comparado.
  • dwCmpFlags - indica que parte do nome do assembly a ser usado na comparação.
Os valores são um ou mais bits definidos na enumeração 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;                       				
os valores de retorno são da seguinte maneira:
  • S_OK: -os nomes coincidir de acordo com os critérios de comparação.
  • S_FALSE: -os nomes não coincidem.

Método IAssemblyName::Clone

O método IAssemblyName::Clone cria uma cópia de um nome de assembly.
    HRESULT Clone(        [out] IAssemblyName **pName);				

Interface IAssemblyEnum

A interface IAssemblyEnum enumera os assemblies no GAC.
 [        local,        object,        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),        pointer_default(unique)]interface IAssemblyEnum : IUnknown				
Para obter uma instância de CreateAssemblyEnum API, chamar CreateAssemblyNameObject API, da seguinte maneira:
STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
parâmetros estão definidos como segue:
  • pEnum - ponteiro para um local de memória que contém o ponteiro IAssemblyEnum .
  • pUnkReserved - deve ser nulo.
  • pName - um nome de assembly que é usado para filtrar a enumeração. Pode ser nulo para enumerar todos os assemblies no GAC.
  • dwFlags - exatamente um bit de enumeração ASM_CACHE_FLAGS .
  • pvReserved - deve ser NULL.

Enumeração ASM_CACHE_FLAGS

A enumeração ASM_CACHE_FLAGS contém os seguintes valores:
  • ASM_CACHE_ZAP - enumera o cache de assemblies pré-compilados usando NGen.exe.
  • ASM_CACHE_GAC - enumera o GAC.
  • ASM_CACHE_DOWNLOAD - enumera os assemblies que foram baixada por demanda ou que tenham sido copiados em sombra.
IAssemblyName::GetDisplayName
typedef enum{    ASM_CACHE_ZAP            = 0x1,    ASM_CACHE_GAC            = 0x2,    ASM_CACHE_DOWNLOAD       = 0x4} ASM_CACHE_FLAGS;				

Método IAssemblyEnum::GetNextAssembly

O método IAssemblyEnum::GetNextAssembly enumera os assemblies no GAC.
    HRESULT GetNextAssembly    (        [in]                  LPVOID                pvReserved,        [out]                 IAssemblyName       **ppName,        [in]                  DWORD                 dwFlags    );				
Os parâmetros são definidos como:
  • pvReserved - deve ser nulo.
  • ppName - ponteiro para um local de memória que está receber o ponteiro de interface para o nome de assembly do assembly próximo que é enumerado.
  • dwFlags - deve ser zero.

Interface IInstallReferenceItem

A interface IInstallReferenceItem representa uma referência que foi definida em um assembly no GAC. Instâncias de IInstallReferenceIteam são retornadas pela interface IInstallReferenceEnum .
[        local,        object,        uuid(582dac66-e678-449f-aba6-6faaec8a9394),        pointer_default(unique)]interface IInstallReferenceItem : IUnknown				

Método IInstallReferenceItem::GetReference

O método IInstallReferenceItem::GetReference retorna uma estrutura FUSION_INSTALL_REFERENCE .
    HRESULT GetReference    (    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,    [in]  DWORD dwFlags,    [in]  LPVOID pvReserved    );				
Os parâmetros são definidos como:
  • ppRefData - um ponteiro para uma estrutura FUSION_INSTALL_REFERENCE . A memória é alocada pelo método GetReference e é liberada quando IInstallReferenceItem for lançado. Os chamadores não devem manter uma referência a esse buffer após o objeto IInstallReferenceItem é lançado.
  • dwFlags - deve ser zero.
  • pvReserved - deve ser nulo.

Interface IInstallReferenceEnum

A interface IInstallReferenceEnum enumera todas as referências que são definidas em um assembly no GAC.

Observação : referências que pertencem ao assembly estão bloqueadas para alterações enquanto essas referências estão sendo enumeradas.
[        local,        object,        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),        pointer_default(unique)]interface IInstallReferenceEnum : IUnknown				
Para obter uma instância de CreateInstallReferenceEnum API, chamar CreateInstallReferenceEnum API, da seguinte maneira:
STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
parâmetros estão definidos como segue:
  • ppRefEnum - um ponteiro para um local da memória que recebe o ponteiro IInstallReferenceEnum .
  • pName - O nome de assembly para o qual as referências são enumeradas.
  • dwFlags - deve ser zero.
  • pvReserved - deve ser nulo.

Método IInstallReferenceEnum::GetNextInstallReferenceItem

IInstallReferenceEnum::GetNextInstallReferenceItem retorna as próxima informações de referência para um assembly.
    HRESULT GetNextInstallReferenceItem            (            [out] IInstallReferenceItem **ppRefItem,            [in]  DWORD dwFlags,            [in]  LPVOID pvReserved            );				
Os parâmetros são definidos como:
  • ppRefItem - ponteiro para um local memória que recebe o ponteiro IInstallReferenceItem .
  • dwFlags - deve ser zero.
  • pvReserved - deve ser nulo.
Valores de retorno são da seguinte maneira:
  • S_OK: -O próximo item é retornado com êxito.
  • S_FALSE: -não há mais itens.

GetCachePath API

GetCachePath API retorna o local de armazenamento do GAC.
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
Os parâmetros são definidos como:
  • dwCacheFlags - exatamente um de bits definidos na enumeração ASM_CACHE_FLAGS .
  • pwzCachePath - ponteiro para um buffer que receberá o caminho do GAC como uma seqüência de caracteres Unicode.
  • pcchPath - comprimento do buffer pwszCachePath , em caracteres 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); ")				

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 317540 - Última Revisão: 04/04/2003 22:49:16 - Revisão: 3.0

  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
  • kbmt kbbug kbdocerr kbpending KB317540 KbMtpt
Comentários