DOC: API-интерфейсы для сборки в глобальный кэш СБОРОК не были описаны в.NET Framework Kit (SDK ЦЕНТРА) разработки документации

Переводы статьи Переводы статьи
Код статьи: 317540
Развернуть все | Свернуть все

В этой статье

Аннотация

Интерфейсы (API) машинного кода позволяющие взаимодействовать с глобального кэша сборок (GAC), не в.NET Framework Software Development Kit (SDK) документации.

Дополнительная информация

ВНИМАНИЕ!: Не используйте эти API-интерфейсы в приложение для выполнения сборки Привязывает или для проверки на наличие сборки или других время выполнения разработки, или операций во время разработки. Только средства администрирования и настройки программ должны Используйте эти интерфейсы API. Если используется глобальный кэш СБОРОК, это непосредственно подвергает приложение сборка привязка неустойчивость за счет разрешения или может привести к приложению работать неправильно с в будущих версиях.NET Framework.

Глобальный кэш СБОРОК хранятся сборки, являются общими для всех приложений на компьютере. Фактическое место хранения и структура глобального кэша СБОРОК не документированы и может быть изменен в будущих версии.NET Framework и операционных систем Microsoft Windows системы.

Это единственный способ доступа к сборкам в глобальном кэше СБОРОК через API-интерфейсы, описанные в этой статье.

Большинство приложения не должны использовать эти интерфейсы API, поскольку привязки сборок автоматически выполняемая общеязыковая среда выполнения. Только пользовательские установки программы и средства управления необходимо использовать эти интерфейсы API. Установщик Microsoft Windows имеется встроенная поддержка установки сборок в глобальный кэш сборок.

Для получения дополнительных просмотреть сведения о сборках и глобальный кэш СБОРОК.NET Framework SDK.

Используйте API глобальный кэш СБОРОК в следующих случаях:
  • При установке сборки в глобальный кэш сборок.
  • При удалении сборки из глобального кэша СБОРОК.
  • При экспорте сборки из глобального кэша СБОРОК.
  • Когда вы перечисляете сборки, доступные в ГЛОБАЛЬНЫЙ КЭШ СБОРОК.
ПРИМЕЧАНИЕ: CoInitialize(Ex) должен быть вызван перед тем как использовать все функции и интерфейсы описанные в данной спецификации.

Интерфейс IAssemblyCache

В IAssemblyCache интерфейс — это интерфейс верхнего уровня, который обеспечивает доступ к ГЛОБАЛЬНЫЙ КЭШ СБОРОК.

Для получения экземпляра CreateAssemblyCache Интерфейс API, вызов CreateAssemblyCache API-Интерфейс, как показано ниже:
STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); 
Параметры определяются следующим образом:
  • ppAsmCache - указатель для возврата IAssemblyCache
  • dwReserved

Структура FUSION_INSTALL_REFERENCE

В FUSION_INSTALL_REFERENCE Структура представляет ссылку, при создании приложения установленные сборки в глобальный кэш СБОРОК.
    typedef struct _FUSION_INSTALL_REFERENCE_
    {
        DWORD  cbSize;
        DWORD  dwFlags;
        GUID   guidScheme;     // Contains one of the pre-defined GUIDs.
        LPCWSTR szIdentifier;  // Unique identifier for the application that installs this  assembly.
        LPCWSTR szNonCannonicalData;  // Data is description; relevant to the GUID above. 
    } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;
				
Поля структуры определяются следующим образом:
  • cbSize -Размер структуры в байтах.
  • dwFlags -Зарезервирован, должно быть равно нулю.
  • guidScheme -Сущность, добавляющая ссылку.
  • szIdentifier -Уникальная строка, идентифицирующая приложение, в котором установлены сборка.
  • szNonCannonicalData -Строка, которая только понятно сущность, которая добавляет ссылка. Только эта строка хранится в глобальном кэше СБОРОК.
Возможные значения для guidScheme поле может принимать одно из следующих:
  • FUSION_REFCOUNT_MSI_GUID -Ссылка была приложением установлены с помощью установщика Windows. В szIdentifier поле имеет значение MSI, и szNonCannonicalData имеет значение Установщик Windows. Эта схема должна использоваться только установщиком Windows сам.
  • FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID -Ссылка в приложении, появится в Установка и удаление программ. В szIdentifier поле — это маркер, используемый для регистрации приложения с Установка и удаление программ.
  • FUSION_REFCOUNT_FILEPATH_GUID -Ссылка является приложением в файловой системе в виде файла. В szIdentifier поле — это путь к этому файлу.
  • FUSION_REFCOUNT_OPAQUE_STRING_GUID -Ссылка только приложением представленный непрозрачная строка. В szIdentifier Это непрозрачная строка. Глобальный кэш СБОРОК не выполняет существование Проверка непрозрачных ссылок при удалении этого.

Структура ASSEMBLY_INFO

В ASSEMBLY_INFO Структура представляет информацию о сборке в кэш сборок.

Поля структуры определяются следующим образом:
  • cbAssemblyInfo -Размер структуры в байтах. Разрешает дополнения Структура в будущие версии.NET Framework.
  • dwAssemblyFlags -Указывает один или несколько ASSEMBLYINFO_FLAG_ * Служба BITS.
  • uliAssemblySizeInKB -Размер файлов, составляющих сборку в килобайтах (КБ).
  • pszCurrentAssemblyPathBuf -Указатель на буфер строки, содержащий текущий путь каталог, содержащий файлы, образующие сборку. Путь должен иметь с нуля.
  • cchBuf -Размер буфера, pszCurrentAssemblyPathBug поле указывает.
dwAssemblyFlags может иметь одно из следующих значений:
  • ASSEMBLYINFO_FLAG__INSTALLED -Указывает, что сборка фактически установлена. Всегда устанавливать в текущей версии.NET Framework.
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT -Никогда не указывайте в текущей версии.NET Framework.

Метод IAssemblyCache::UninstallAssembly

В IAssemblyCache::UninstallAssembly метод удаляет ссылку на сборку из глобального кэша СБОРОК. Если другие приложения хранения других ссылок на сборки, файлы, составляющие сборки удаляются из глобального кэша СБОРОК.
    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );

				
Параметры определяются следующим образом:
  • dwFlags -Флаги не определено. Должно быть равно нулю.
  • pszAssemblyName -Имя сборки. Завершен нулевой Юникода Строка.
  • pRefData -Указатель FUSION_INSTALL_REFERENCE Структура. Несмотря на то, что это не рекомендуется для этого параметра можно иметь значение null. Сборка устанавливается без ссылок приложения или все ссылки на существующие приложения будут потеряны.
  • pulDisposition -Указатель на целое число, определяющее действие, которое является выполняемые функции.
ПРИМЕЧАНИЕ: Если pulDisposition не пусто, pulDisposition содержит одно из следующих значений:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED -Файлы сборки были удалены из глобального кэша СБОРОК.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE -Приложение использует сборку. Это значение возвращается на Microsoft Windows 95 или Microsoft Windows 98.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED -Сборка отсутствует в глобальном кэше СБОРОК.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING -Не используется.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES -Сборка не была удалена из глобального кэша СБОРОК так как другой существует ссылка на приложение.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND -Ссылка, указанный в pRefData не найден в глобальном кэше СБОРОК.
Возвращаемые значения определяются следующим образом:
  • S_OK -Сборка была удалена.
  • S_FALSE -Операция выполнена успешно, но сборка не была удалена из глобальный кэш СБОРОК. Причина, по которой описано в pulDisposition.

Метод IAssemblyCache::QueryAssemblyInfo

В IAssemblyCache::QueryAssemblyInfo метод извлекает сведения о сборке из глобального кэша СБОРОК.
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
				
Параметры определяются следующим образом:
  • dwFlags -Один из QUERYASMINFO_FLAG_VALIDATE -или- QUERYASMINFO_FLAG_GETSIZE:
    • * _VALIDATE -Выполняет проверку файлов в глобальном кэше СБОРОК, от манифест сборки, включая проверку хэша и подписи строгого имени Проверка.
    • * _GETSIZE -Возвращает размер всех файлов в сборке (объем диска). Если этот параметр не указан, ASSEMBLY_INFO::uliAssemblySizeInKB поле не изменяется.
  • pszAssemblyName — Имя сборки, запрашивается.
  • pAsmInfo -Указатель на интерфейс ASSEMBLY_INFO Структура.

Метод IAssemblyCache::InstallAssembly

В IAssemblyCache::InstallAssembly метод добавляет новую сборку в глобальный кэш сборок. Сборка должна быть в файловой системе и копируется в глобальный кэш сборок.
    HRESULT InstallAssembly( // If you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );
				
Параметры определяются следующим образом:
  • dwFlags -В большинстве случаев один бит элемента IASSEMBLYCACHE_INSTALL_FLAG_ * значения могут быть указаны:
    • * _REFRESH -Если сборка уже установлена в глобальном кэше СБОРОК и файлов номера версий сборки устанавливаются такие же или более поздней версии файлы будут заменены.
    • * _FORCE_REFRESH -Существующие сборки будут удалены независимо от их номер версии.
  • pszManifestFilePath -Строка, указывающая динамической библиотеки (DLL), содержит манифест сборки. Другие файлы сборки должны находиться в том же каталог как DLL, содержащего манифест сборки.
  • pRefData -Указатель FUSION_INSTALL_REFERENCE Указывает приложение, от имени которого она является выполняется установка. Хотя это не рекомендуется, этот параметр может иметь значение null, но при этом остается сборки без ссылок приложения.

Интерфейс IAssemblyName

В IAssemblyName интерфейс представляет собой имя сборки. Включает в себя имя сборки предварительно определенный набор пар "имя значение". Имя сборки, описанной в подробно описаны в.NET Framework SDK.
[
        local,
        object,
        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
        pointer_default(unique)
]
interface IAssemblyName: IUnknown
				
Экземпляр IAssemblyName получается путем вызова метода CreateAssemblyNameObject API:
STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved);
Параметры определяются следующим образом:
  • ppAssemblyNameObj -Указатель на область памяти, который получает IAssemblyName указатель, который будет создан.
  • szAssemblyName -Строковое представление имени сборки или полное ссылка на сборку, которая определяется dwFlags. Строковое представление может иметь значение null.
  • dwFlags -Ноль или несколько битов, которые определены в CREATE_ASM_NAME_OBJ_FLAGS значение перечисления.
  • pvReserved -Должно быть равно null.

Перечисление CREATE_ASM_NAME_OBJ_FLAGS

В CREATE_ASM_NAME_OBJ_FLAGS Перечисление содержит следующие значения:
  • CANOF_PARSE_DISPLAY_NAME -Если этот флаг указан, szAssemblyName параметр — это полное имя сборки и анализируется отдельным свойства. Если флаг не указан, szAssemblyName Это «Имя» часть имени сборки.
  • CANOF_SET_DEFAULT_VALUES -Если этот флаг не задан, то некоторые свойства, такие как архитектура процессора, устанавливаются значения по умолчанию.
    typedef enum {
         CANOF_PARSE_DISPLAY_NAME = 0x1,
         CANOF_SET_DEFAULT_VALUES = 0x2
    } CREATE_ASM_NAME_OBJ_FLAGS;
				

Перечисление ASM_NAME

В ASM_NAME Идентификатор свойства перечисления описывает допустимые имена пары имя значение в поле имя сборки. См.NET Framework SDK Описание этих свойств.
    typedef enum
    {
        ASM_NAME_PUBLIC_KEY = 0,
        ASM_NAME_PUBLIC_KEY_TOKEN,
        ASM_NAME_HASH_VALUE,
        ASM_NAME_NAME,
        ASM_NAME_MAJOR_VERSION,
        ASM_NAME_MINOR_VERSION,
        ASM_NAME_BUILD_NUMBER,
        ASM_NAME_REVISION_NUMBER,
        ASM_NAME_CULTURE,
        ASM_NAME_PROCESSOR_ID_ARRAY,
        ASM_NAME_OSINFO_ARRAY,
        ASM_NAME_HASH_ALGID,
        ASM_NAME_ALIAS,
        ASM_NAME_CODEBASE_URL,
        ASM_NAME_CODEBASE_LASTMOD,
        ASM_NAME_NULL_PUBLIC_KEY,
        ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
        ASM_NAME_CUSTOM,
        ASM_NAME_NULL_CUSTOM,                
        ASM_NAME_MVID,
        ASM_NAME_MAX_PARAMS
    } ASM_NAME;
				

Метод IAssemblyName::SetProperty

В IAssemblyName::SetProperty метод добавляет пару имя значение имени сборки, или, если пара имя значение с тем же именем уже существует, изменяет или удаляет значение пары "имя значение".
    HRESULT SetProperty(
        [in]    DWORD  PropertyId, 
        [in]    LPVOID pvProperty,
        [in]    DWORD  cbProperty);
				
Параметры определяются следующим образом:
  • PropertyId -Идентификатор, представляющий имя часть пары имя значение Чтобы добавить или изменить это. Допустимое свойство идентификаторов определяются в ASM_NAME значение перечисления.
  • pvProperty -Указатель на буфер, содержащий значение свойство.
  • cbProperty -Длина pvProperty буфера в байтах. Если cbProperty равно нулю, пары имя значение удаляется из сборки имя.

Метод IAssemblyName::GetProperty

В IAssemblyName::GetProperty метод извлекает значение из пары имя значение в сборке имя, которое указывает имя.
    HRESULT GetProperty(
        [in]         DWORD    PropertyId, 
        [out]        LPVOID   pvProperty,
        [in, out]    LPDWORD  pcbProperty);
				
Параметры определяются следующим образом:
  • PropertyId -Идентификатор, представляющий имя имя значение пары значение должно быть извлечено. Указанное свойство идентификаторов определяются в ASM_NAME значение перечисления.
  • pvProperty -Указатель на буфер, которая будет содержать значение свойство.
  • cbProperty -Длина pvProperty буфер, в байтах.

Метод IAssemblyName::Finalize

В IAssemblyName::Finalize метод замораживает имя сборки. Дополнительные вызовы IAssemblyName::SetProperty После вызова этого метода, не удастся.
HRESULT Finalize();

Метод IAssemblyName::GetDisplayName

В IAssemblyName::GetDisplayName метод возвращает строковое представление имени сборки.
    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);
				
Параметры определяются следующим образом:
  • szDisplayName -Указатель на буфер, который должен содержать отображаемое имя. В отображаемое имя возвращается в формате Юникод.
  • pccDisplayName -Размер буфера в символах (на входе). Длина Возвращенный отображаемое имя (на возврат).
  • dwDisplayFlags -Один или несколько битов, определенных в ASM_DISPLAY_FLAGS перечисления:
    • * _VERSION -Включает номер версии как часть экрана имя.
    • * _CULTURE -Включает в себя культуру.
    • * _PUBLIC_KEY_TOKEN -Включает в себя открытый ключ.
    • * _PUBLIC_KEY -Включает в себя открытый ключ.
    • * _CUSTOM -Включает в себя пользовательскую часть имени сборки.
    • * _PROCESSORARCHITECTURE -Включает в себя архитектуру процессора.
    • * _LANGUAGEID -Содержит идентификатор языка.
    typedef enum
    {
        ASM_DISPLAYF_VERSION    = 0x1,
        ASM_DISPLAYF_CULTURE    = 0x2,
        ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
        ASM_DISPLAYF_PUBLIC_KEY = 0x8,
        ASM_DISPLAYF_CUSTOM     = 0x10,
        ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
        ASM_DISPLAYF_LANGUAGEID     = 0x40

    } ASM_DISPLAY_FLAGS;
				

Метод IAssemblyName::GetName

В IAssemblyName::GetName метод возвращает имя часть имени сборки.
    HRESULT GetName(
        [in, out] LPDWORD lpcwBuffer,
        [out] WCHAR *pwzName);
				
Параметры определяются следующим образом:
  • lpcwBuffer -Размер "pwszName" буфер (на входе). Длина имени (на возврат).
  • "pwszName" -Указатель на буфер, которая будет содержать часть имени имя сборки.

Метод IAssemblyName::GetVersion

В IAssemblyName::GetVersion метод возвращает версию часть имени сборки.
HRESULT GetVersion(
        [out] LPDWORD pdwVersionHi,
        [out] LPDWORD pdwVersionLow);
				
Параметры определяются следующим образом:
  • pdwVersionHi -Указатель типа DWORD, содержащий верхних 32 бит номер версии.
  • pdwVersionLow -Указатель типа DWORD, которые содержат нижние 32 бит номер версии.

Метод IAssemblyName::IsEqual

В IAssemblyName::IsEqual метод сравнивает имя сборки к другой имена сборок.
    HRESULT IsEqual(
        [in] IAssemblyName *pName,
        [in] DWORD dwCmpFlags);
				
Параметры определяются следующим образом:
  • pName -Имя сборки для сравнения.
  • dwCmpFlags -Показывает, какую часть имени сборки для использования в сравнение.
Значения: одно или несколько битов, определенного в ASM_CMP_FLAGS перечисления:
    typedef enum
    {
        ASM_CMPF_NAME            = 0x1,
        ASM_CMPF_MAJOR_VERSION   = 0x2,
        ASM_CMPF_MINOR_VERSION   = 0x4,
        ASM_CMPF_BUILD_NUMBER    = 0x8,
        ASM_CMPF_REVISION_NUMBER = 0x10,
        ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
        ASM_CMPF_CULTURE         = 0x40,
        ASM_CMPF_CUSTOM          = 0x80,
        ASM_CMPF_ALL = ASM_CMPF_NAME | ASM_CMPF_MAJOR_VERSION | ASM_CMPF_MINOR_VERSION |
                       ASM_CMPF_REVISION_NUMBER | ASM_CMPF_BUILD_NUMBER |
                       ASM_CMPF_PUBLIC_KEY_TOKEN | ASM_CMPF_CULTURE | ASM_CMPF_CUSTOM,
        // For strongly named assemblies, ASM_CMPF_DEFAULT==ASM_CMPF_ALL.
        // For simply named assemblies, this is also true. However, when
        // performing IAssemblyName::IsEqual, the build number/revision 
        // number will be removed from the comparison.
        ASM_CMPF_DEFAULT = 0x100
    } ASM_CMP_FLAGS;                       
				
Ниже приведены возвращаемые значения.
  • S_OK. -Имена совпадают для сравнения критерии.
  • S_FALSE. -Имена не совпадают.

Метод IAssemblyName::Clone

В IAssemblyName::Clone метод создает копию имя сборки.
    HRESULT Clone(
        [out] IAssemblyName **pName);
				

Интерфейс IAssemblyEnum

В IAssemblyEnum интерфейс выполняет перечисление сборок в глобальном кэше СБОРОК.
 [
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
				
Для получения экземпляра CreateAssemblyEnum Интерфейс API, вызов CreateAssemblyNameObject API-Интерфейс, как показано ниже:
STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
Параметры определяются следующим образом:
  • pEnum -Указатель на область памяти, содержащую IAssemblyEnum указатель.
  • pUnkReserved -Должно быть равно null.
  • pName — Имя сборки, используемые для фильтрации перечисления. Может быть значение NULL для перечисления всех сборок в глобальном кэше СБОРОК.
  • dwFlags -Ровно один бит из ASM_CACHE_FLAGS значение перечисления.
  • pvReserved -Должно быть NULL.

Перечисление ASM_CACHE_FLAGS

В ASM_CACHE_FLAGS Перечисление содержит следующие значения:
  • ASM_CACHE_ZAP -Перечисляет кэш предкомпилированных сборок с помощью Программа Ngen.exe.
  • ASM_CACHE_GAC -Перечисление глобального кэша СБОРОК.
  • ASM_CACHE_DOWNLOAD -Перечисляет сборки, которые были загружены по требованию или было теневого копирования.
IAssemblyName::GetDisplayName
typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;
				

Метод IAssemblyEnum::GetNextAssembly

В IAssemblyEnum::GetNextAssembly метод выполняет перечисление сборок в глобальном кэше СБОРОК.
    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );
				
Параметры определяются следующим образом:
  • pvReserved -Должно быть равно null.
  • ppName -Указатель на область памяти, который должен получить интерфейс указатель на имя сборки следующей сборки перечисление.
  • dwFlags -Должно быть равно нулю.

Интерфейс IInstallReferenceItem

В IInstallReferenceItem интерфейс предоставляет ссылку на который был назначен для сборки в глобальном кэше СБОРОК. Экземпляры IInstallReferenceIteam возвращаемые IInstallReferenceEnum интерфейс.
[
        local,
        object,
        uuid(582dac66-e678-449f-aba6-6faaec8a9394),
        pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
				

Метод IInstallReferenceItem::GetReference

В IInstallReferenceItem::GetReference Возвращает метод FUSION_INSTALL_REFERENCE Структура.
    HRESULT GetReference
    (
    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,
    [in]  DWORD dwFlags,
    [in]  LPVOID pvReserved
    );
				
Параметры определяются следующим образом:
  • ppRefData -Указатель FUSION_INSTALL_REFERENCE Структура. Память выделяется по GetReference метод и освобождается при IInstallReferenceItem освобождается. Вызывающие объекты не должны содержать ссылку на этот буфер После IInstallReferenceItem объект освобождается.
  • dwFlags -Должно быть равно нулю.
  • pvReserved -Должно быть равно null.

Интерфейс IInstallReferenceEnum

В IInstallReferenceEnum интерфейс перечисляет все ссылки, которые устанавливаются на сборку в глобальном кэше СБОРОК.

ПРИМЕЧАНИЕ: Для изменения фиксируются ссылки, которые принадлежат к сборке Хотя эти ссылки отображаются.
[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
				
Для получения экземпляра CreateInstallReferenceEnum Интерфейс API, вызов CreateInstallReferenceEnum API-Интерфейс, как показано ниже:
STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
Параметры определяются следующим образом:
  • ppRefEnum -Указатель на область памяти, который получает IInstallReferenceEnum указатель.
  • pName — Имя сборки, для которого являются ссылки перечисление.
  • dwFlags -Должно быть равно нулю.
  • pvReserved -Должно быть равно null.

Метод IInstallReferenceEnum::GetNextInstallReferenceItem

IInstallReferenceEnum::GetNextInstallReferenceItem Возвращает следующий справочные сведения о сборке.
    HRESULT GetNextInstallReferenceItem
            (
            [out] IInstallReferenceItem **ppRefItem,
            [in]  DWORD dwFlags,
            [in]  LPVOID pvReserved
            );
				
Параметры определяются следующим образом:
  • ppRefItem -Указатель на область памяти, который получает IInstallReferenceItem указатель.
  • dwFlags -Должно быть равно нулю.
  • pvReserved -Должно быть равно null.
Ниже приведены возвращаемые значения.
  • S_OK. -Следующий элемент возвращается успешно.
  • S_FALSE. -Не дополнительные элементы.

GetCachePath API

В GetCachePath API Возвращает место хранения в глобальном кэше СБОРОК.
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
Параметры определяются следующим образом:
  • dwCacheFlags -Один из битов, определенных в ASM_CACHE_FLAGS значение перечисления.
  • pwzCachePath -Указатель на буфер, который должен получить путь GAC как Строка Юникода.
  • pcchPath -Длина pwszCachePath буфер, в символах Юникода.
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
//+---------------------------------------------------------------------------
// 
//  Microsoft Windows
//  File:       fusion.idl
// 
//  Contents:   Fusion Interfaces
// 
//  Classes:
// 
//  Functions:
// 
// 
//----------------------------------------------------------------------------
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// fusion.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Copyright (c) Microsoft Corporation.  All rights reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("#ifdef _MSC_VER")
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("//---------------------------------------------------------------------------=")
cpp_quote("// Fusion Interfaces.")
cpp_quote("")

import "objidl.idl";

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

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


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

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

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

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


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

    typedef const FUSION_INSTALL_REFERENCE  *LPCFUSION_INSTALL_REFERENCE;


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

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

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

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

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

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

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

}


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

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

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

}



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

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

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

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

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

    HRESULT Finalize();

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

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


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

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

}

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

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

    HRESULT Reset(void);

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


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

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

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

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

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

Свойства

Код статьи: 317540 - Последний отзыв: 7 июня 2011 г. - Revision: 4.0
Ключевые слова: 
kbbug kbdocerr kbpending kbmt KB317540 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:317540
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.

Отправить отзыв

 

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