В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

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

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке: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 — последний просмотр: 06/07/2011 09:59:00 — редакция: 4.0

  • kbbug kbdocerr kbpending kbmt KB317540 KbMtru
Отзывы и предложения