DOC: Perakitan Global Cache (GAC) api tidak didokumentasikan dalam.NET Framework Software Development Kit (SDK) dokumentasi

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 317540
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Kode asli aplikasi pemrograman antarmuka (api) yang memungkinkan Anda untuk berinteraksi dengan Cache perakitan Global (GAC) tidak didokumentasikan dalam.NET Framework Software Development Kit (SDK) dokumentasi.

INFORMASI LEBIH LANJUT

HATI-HATI: Tidak menggunakan api ini dalam aplikasi Anda untuk melakukan Majelis mengikat atau untuk menguji kehadiran Majelis atau lain jangka waktu, pengembangan, atau desain-waktu operasi. Hanya alat administratif dan setup program harus menggunakan api ini. Jika Anda menggunakan GAC, ini langsung mengungkapkan aplikasi Anda untuk Majelis mengikat kerapuhan atau dapat menyebabkan aplikasi Anda untuk bekerja tidak benar di versi masa depan.NET Framework.

GAC toko Majelis yang bersama di semua aplikasi pada komputer. Lokasi penyimpanan sebenarnya dan struktur GAC tidak didokumentasikan dan dapat berubah di masa depan Versi.NET Framework dan operasi Microsoft Windows sistem.

Satu-satunya metode yang didukung untuk akses Majelis di GAC adalah melalui api yang didokumentasikan dalam artikel ini.

Sebagian besar aplikasi tidak perlu menggunakan api ini karena Majelis yang mengikat dilakukan secara otomatis oleh common language runtime. Hanya kustom setup program atau alat manajemen harus menggunakan api ini. Microsoft Windows Installer memiliki dukungan asli untuk menginstal Majelis ke GAC.

Untuk lebih informasi tentang Majelis dan GAC, lihat.NET Framework SDK.

Menggunakan GAC API dalam skenario berikut:
  • Ketika Anda menginstal sebuah pertemuan ke GAC.
  • Ketika Anda menghapus sebuah pertemuan dari GAC.
  • Ketika Anda mengekspor perakitan dari GAC.
  • Ketika Anda menghitung Majelis yang tersedia dalam GAC.
CATATAN: CoInitialize(Ex) harus disebut sebelum Anda menggunakan salah satu fungsi dan antarmuka yang dijelaskan dalam spesifikasi ini.

IAssemblyCache antarmuka

The IAssemblyCache antarmuka adalah antarmuka top-level yang menyediakan akses ke GAC.

Untuk mendapatkan contoh CreateAssemblyCache API, panggilan CreateAssemblyCache API, sebagai berikut:
STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); 
Parameter yang didefinisikan sebagai berikut:
  • ppAsmCache - Pointer untuk kembali IAssemblyCache
  • dwReserved

Struktur FUSION_INSTALL_REFERENCE

The FUSION_INSTALL_REFERENCE struktur mewakili referensi yang dibuat ketika aplikasi telah terinstal berkumpul di 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;
				
Bidang struktur didefinisikan sebagai berikut:
  • cbSize -Ukuran struktur dalam bytes.
  • dwFlags -Reserved, harus menjadi nol.
  • guidScheme -Entitas yang menambahkan referensi.
  • szIdentifier -String unik yang mengidentifikasi aplikasi yang terinstal Majelis.
  • szNonCannonicalData -String yang hanya dipahami oleh entitas yang menambahkan referensi. GAC hanya menyimpan string ini.
Mungkin nilai untuk guidScheme bidang dapat menjadi salah satu dari berikut ini:
  • FUSION_REFCOUNT_MSI_GUID -Majelis direkomendasikan oleh aplikasi yang telah diinstal dengan menggunakan Windows Installer. The szIdentifier bidang diatur ke MSI, dan szNonCannonicalData diatur ke Windows Installer. Skema ini hanya akan digunakan oleh Windows Installer itu sendiri.
  • FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID -Majelis direkomendasikan oleh aplikasi yang muncul di Tambah/Hapus Program. The szIdentifier lapangan adalah tanda yang digunakan untuk mendaftar aplikasi dengan Tambah/Hapus Program.
  • FUSION_REFCOUNT_FILEPATH_GUID -Majelis direkomendasikan oleh aplikasi yang diwakili oleh sebuah file dalam sistem berkas. The szIdentifier lapangan adalah path ke file ini.
  • FUSION_REFCOUNT_OPAQUE_STRING_GUID -Majelis direkomendasikan oleh aplikasi yang hanya diwakili oleh tali buram. The szIdentifier adalah ini string buram. GAC tidak melakukan keberadaan memeriksa referensi buram bila Anda menghapus ini.

Struktur ASSEMBLY_INFO

The ASSEMBLY_INFO struktur mewakili informasi tentang sebuah pertemuan di Majelis cache.

Bidang struktur didefinisikan sebagai berikut:
  • cbAssemblyInfo -Ukuran struktur dalam bytes. Izin tambahan struktur di masa depan versi.NET Framework.
  • dwAssemblyFlags -Menunjukkan satu atau lebih ASSEMBLYINFO_FLAG_ * bit.
  • uliAssemblySizeInKB -Ukuran file yang membentuk Majelis dalam Kilobyte (KB).
  • pszCurrentAssemblyPathBuf -Pointer ke buffer string yang memegang jalan saat ini direktori yang berisi file yang membentuk Majelis. Jalan harus diakhiri dengan nol.
  • cchBuf -Ukuran buffer yang pszCurrentAssemblyPathBug bidang poin untuk.
dwAssemblyFlags dapat memiliki salah satu nilai berikut:
  • ASSEMBLYINFO_FLAG__INSTALLED -Menandakan bahwa Majelis benar-benar terinstal. Selalu dalam versi saat ini.NET Framework.
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT -Pernah diatur dalam versi.NET Kerangka.

IAssemblyCache::UninstallAssembly metode

The IAssemblyCache::UninstallAssembly metode menghapus referensi ke Majelis dari GAC. Jika lain aplikasi terus ada lain rujukan kepada Majelis, file yang Majelis akan dihapus dari GAC.
    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );

				
Parameter yang didefinisikan sebagai berikut:
  • dwFlags -Tidak ada bendera didefinisikan. Harus nol.
  • pszAssemblyName -Nama Majelis. Berakhir nol Unicode string.
  • pRefData -Pointer ke FUSION_INSTALL_REFERENCE struktur. Meskipun hal ini tidak dianjurkan, parameter ini dapat harus bernilai null. Majelis diinstal tanpa referensi aplikasi, atau semua ada aplikasi referensi hilang.
  • pulDisposition -Pointer ke integer yang menunjukkan tindakan yang dilakukan oleh fungsi.
CATATAN: Jika pulDisposition tidaklah null, pulDisposition berisi salah satu nilai berikut:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED -Perakitan file yang telah dihapus dari GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE -Aplikasi menggunakan Majelis. Nilai ini kembali pada Microsoft Windows 95 dan Microsoft Windows 98.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED -Majelis tidak ada dalam GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING -Tidak digunakan.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES -Majelis tidak dihapus dari GAC karena lain aplikasi referensi ada.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND -Referensi yang ditentukan dalam pRefData tidak ditemukan dalam GAC.
Kembali nilai-nilai yang ditetapkan sebagai berikut:
  • S_OK -Majelis telah dihapus.
  • S_FALSE -Operasi berhasil, tapi Majelis tidak dihapus dari GAC. Alasan dijelaskan dalam pulDisposition.

IAssemblyCache::QueryAssemblyInfo metode

The IAssemblyCache::QueryAssemblyInfo metode mengumpulkan informasi tentang perakitan dari GAC.
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
				
Parameter yang didefinisikan sebagai berikut:
  • dwFlags -Salah satu QUERYASMINFO_FLAG_VALIDATE atau QUERYASMINFO_FLAG_GETSIZE:
    • * _VALIDATE -Melakukan validasi file dalam GAC terhadap Majelis nyata, termasuk hash verifikasi dan tanda tangan nama kuat verifikasi.
    • * _GETSIZE -Kembali ukuran semua file di Majelis (disk tapak). Jika ini tidak ditentukan, ASSEMBLY_INFO::uliAssemblySizeInKB lapangan tidak diubah.
  • pszAssemblyName -Nama Majelis yang adalah bertanya.
  • pAsmInfo -Pointer untuk kembali ASSEMBLY_INFO struktur.

IAssemblyCache::InstallAssembly metode

The IAssemblyCache::InstallAssembly metode menambah Majelis baru GAC. Majelis harus bertahan dalam sistem file dan disalin ke GAC.
    HRESULT InstallAssembly( // If you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );
				
Parameter yang didefinisikan sebagai berikut:
  • dwFlags -Paling-paling, salah satu bit dari IASSEMBLYCACHE_INSTALL_FLAG_ * nilai-nilai dapat ditentukan:
    • * _REFRESH -Jika Majelis telah terinstal dalam GAC dan file nomor versi dari Majelis yang diinstal adalah sama atau kemudian, file diganti.
    • * _FORCE_REFRESH -File ada Majelis ditimpa terlepas dari nomor versi.
  • pszManifestFilePath -String menunjuk ke dinamis-link library (DLL) yang berisi manifest Majelis. File Majelis lainnya harus berada di sama direktori sebagai DLL yang berisi manifest Majelis.
  • pRefData -Pointer ke FUSION_INSTALL_REFERENCE yang menunjukkan aplikasi atas nama yang perakitan adalah yang diinstal. Meskipun hal ini tidak dianjurkan, parameter ini dapat menjadi null, tapi hal ini membuat Majelis tanpa referensi aplikasi.

IAssemblyName antarmuka

The IAssemblyName antarmuka mewakili nama Majelis. Nama Majelis termasuk seperangkat pasangan nama-nilai yang telah ditetapkan. Nama Majelis dijelaskan dalam detail di.NET Framework SDK.
[
        local,
        object,
        uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
        pointer_default(unique)
]
interface IAssemblyName: IUnknown
				
Contoh IAssemblyName Diperoleh dengan menelepon CreateAssemblyNameObject API:
STDAPI CreateAssemblyNameObject(LPASSEMBLYNAME *ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved);
Parameter yang didefinisikan sebagai berikut:
  • ppAssemblyNameObj -Pointer ke lokasi memori yang menerima IAssemblyName pointer yang dibuat.
  • szAssemblyName -Representasi string dari nama Majelis atau penuh Majelis referensi yang ditentukan oleh dwFlags. Representasi string dapat null.
  • dwFlags -Nol atau lebih bit yang ditetapkan dalam CREATE_ASM_NAME_OBJ_FLAGS Pencacahan.
  • pvReserved -Harus nol.

Pencacahan CREATE_ASM_NAME_OBJ_FLAGS

The CREATE_ASM_NAME_OBJ_FLAGS Pencacahan berisi nilai berikut:
  • CANOF_PARSE_DISPLAY_NAME -Jika bendera ini ditetapkan, szAssemblyName parameter adalah nama Majelis lengkap dan parsing individu properti. Jika bendera tidak ditentukan, szAssemblyName adalah bagian "Nama" dari nama Majelis.
  • CANOF_SET_DEFAULT_VALUES -Jika bendera tertentu, beberapa properti, seperti Arsitektur prosesor, ditetapkan ke nilai default.
    typedef enum {
         CANOF_PARSE_DISPLAY_NAME = 0x1,
         CANOF_SET_DEFAULT_VALUES = 0x2
    } CREATE_ASM_NAME_OBJ_FLAGS;
				

Pencacahan ASM_NAME

The ASM_NAME Pencacahan properti ID menjelaskan nama-nama sah pasangan nama-nilai dalam nama Majelis. Melihat.NET Framework SDK untuk Deskripsi properti ini.
    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 metode

The IAssemblyName::SetProperty metode menambahkan pasangan nama-nilai untuk nama perakitan, atau, jika pasangan nama-nilai dengan nama yang sama sudah ada, memodifikasi atau menghapus nilai pasangan nama-nilai.
    HRESULT SetProperty(
        [in]    DWORD  PropertyId, 
        [in]    LPVOID pvProperty,
        [in]    DWORD  cbProperty);
				
Parameter yang didefinisikan sebagai berikut:
  • PropertyId -ID yang mewakili nama bagian dari pasangan nama-nilai Itulah yang akan ditambahkan atau diubah. Properti Valid ID yang ditetapkan dalam ASM_NAME Pencacahan.
  • pvProperty -Pointer ke buffer yang berisi nilai properti.
  • cbProperty -Panjang pvProperty penyangga dalam bytes. Jika cbProperty nol, pasangan nama-nilai dihapus dari Majelis Nama.

IAssemblyName::GetProperty metode

The IAssemblyName::GetProperty metode mengambil nilai pasangan nama-nilai di Majelis nama yang menentukan nama.
    HRESULT GetProperty(
        [in]         DWORD    PropertyId, 
        [out]        LPVOID   pvProperty,
        [in, out]    LPDWORD  pcbProperty);
				
Parameter yang didefinisikan sebagai berikut:
  • PropertyId -ID yang mewakili nama nama-nilai pasangan yang nilai yang akan diambil. Properti tertentu ID yang ditetapkan dalam ASM_NAME Pencacahan.
  • pvProperty -Pointer ke buffer yang mengandung nilai properti.
  • cbProperty -Panjang pvProperty buffer, dalam bytes.

IAssemblyName::Finalize metode

The IAssemblyName::Finalize metode membeku nama Majelis. Panggilan tambahan untuk IAssemblyName::SetProperty tidak berhasil setelah metode ini disebut.
HRESULT Finalize();

IAssemblyName::GetDisplayName metode

The IAssemblyName::GetDisplayName metode mengembalikan representasi string nama Majelis.
    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);
				
Parameter yang didefinisikan sebagai berikut:
  • szDisplayName -Pointer ke buffer yang mengandung nama tampilan. The nama tampilan kembali dalam Unicode.
  • pccDisplayName -Ukuran penyangga di karakter (pada masukan). Panjang nama tampilan kembali (pada kembali).
  • dwDisplayFlags -Satu atau lebih bit yang didefinisikan dalam ASM_DISPLAY_FLAGS Pencacahan:
    • * _VERSION -Termasuk nomor versi sebagai bagian dari layar Nama.
    • * _CULTURE -Termasuk budaya.
    • * _PUBLIC_KEY_TOKEN -Termasuk token kunci publik.
    • * _PUBLIC_KEY -Berisi kunci publik.
    • * _CUSTOM -Termasuk bagian kustom nama Majelis.
    • * _PROCESSORARCHITECTURE -Termasuk arsitektur prosesor.
    • * _LANGUAGEID -Termasuk bahasa ID.
    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 metode

The IAssemblyName::GetName metode mengembalikan nama bagian dari nama Majelis.
    HRESULT GetName(
        [in, out] LPDWORD lpcwBuffer,
        [out] WCHAR *pwzName);
				
Parameter yang didefinisikan sebagai berikut:
  • lpcwBuffer -Ukuran pwszName penyangga (pada masukan). Panjang nama (kembali).
  • pwszName -Pointer ke buffer yang mengandung nama bagian dari Majelis nama.

IAssemblyName::GetVersion metode

The IAssemblyName::GetVersion metode mengembalikan versi bagian dari nama Majelis.
HRESULT GetVersion(
        [out] LPDWORD pdwVersionHi,
        [out] LPDWORD pdwVersionLow);
				
Parameter yang didefinisikan sebagai berikut:
  • pdwVersionHi -Pointer ke DWORD yang berisi atas 32 bit dari nomor versi.
  • pdwVersionLow -Pointer ke DWORD yang berisi 32 bit lebih rendah dari nomor versi.

IAssemblyName::IsEqual metode

The IAssemblyName::IsEqual metode membandingkan Majelis nama dengan nama-nama lain yang ada di Majelis.
    HRESULT IsEqual(
        [in] IAssemblyName *pName,
        [in] DWORD dwCmpFlags);
				
Parameter yang didefinisikan sebagai berikut:
  • pName -Majelis nama untuk membandingkan.
  • dwCmpFlags -Menunjukkan bagian mana dari nama Majelis untuk digunakan dalam perbandingan.
Nilai-nilai adalah salah satu atau lebih bit didefinisikan dalam ASM_CMP_FLAGS Pencacahan:
    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;                       
				
Kembali nilai-nilai adalah sebagai berikut:
  • S_OK: -Nama sesuai menurut perbandingan kriteria.
  • S_FALSE: -Nama tidak cocok.

IAssemblyName::Clone metode

The IAssemblyName::Clone metode menciptakan salinan nama Majelis.
    HRESULT Clone(
        [out] IAssemblyName **pName);
				

IAssemblyEnum antarmuka

The IAssemblyEnum antarmuka enumerates Majelis dalam GAC.
 [
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
				
Untuk mendapatkan contoh CreateAssemblyEnum API, panggilan CreateAssemblyNameObject API, sebagai berikut:
STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
Parameter yang didefinisikan sebagai berikut:
  • pEnum -Pointer ke lokasi memori yang berisi IAssemblyEnum pointer.
  • pUnkReserved -Harus nol.
  • pName -Nama perakitan yang digunakan untuk menyaring pencacahan. Dapat null untuk menghitung semua Majelis di GAC.
  • dwFlags -Tepat sedikit pun dari ASM_CACHE_FLAGS Pencacahan.
  • pvReserved -Harus NULL.

Pencacahan ASM_CACHE_FLAGS

The ASM_CACHE_FLAGS Pencacahan berisi nilai berikut:
  • ASM_CACHE_ZAP -Enumerates cache Majelis precompiled dengan menggunakan Ngen.exe.
  • ASM_CACHE_GAC -Enumerates GAC.
  • ASM_CACHE_DOWNLOAD -Enumerates Majelis yang telah di-download pada permintaan atau yang telah disalin bayangan.
IAssemblyName::GetDisplayName
typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;
				

IAssemblyEnum::GetNextAssembly metode

The IAssemblyEnum::GetNextAssembly metode enumerates Majelis dalam GAC.
    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );
				
Parameter yang didefinisikan sebagai berikut:
  • pvReserved -Harus nol.
  • ppName -Pointer ke lokasi memori yang menerima antarmuka pointer ke nama Majelis Majelis berikutnya yang dihitung.
  • dwFlags -Harus nol.

IInstallReferenceItem antarmuka

The IInstallReferenceItem antarmuka merupakan referensi yang telah ditetapkan pada Majelis dalam GAC. Contoh-contoh IInstallReferenceIteam kembali oleh IInstallReferenceEnum antarmuka.
[
        local,
        object,
        uuid(582dac66-e678-449f-aba6-6faaec8a9394),
        pointer_default(unique)
]
interface IInstallReferenceItem : IUnknown
				

IInstallReferenceItem::GetReference metode

The IInstallReferenceItem::GetReference metode kembali FUSION_INSTALL_REFERENCE struktur.
    HRESULT GetReference
    (
    [out] LPFUSION_INSTALL_REFERENCE *ppRefData,
    [in]  DWORD dwFlags,
    [in]  LPVOID pvReserved
    );
				
Parameter yang didefinisikan sebagai berikut:
  • ppRefData -Pointer ke FUSION_INSTALL_REFERENCE struktur. Memori dialokasikan oleh GetReference metode dan dibebaskan ketika IInstallReferenceItem dirilis. Penelepon tidak harus memiliki referensi ke buffer ini Setelah IInstallReferenceItem objek dirilis.
  • dwFlags -Harus nol.
  • pvReserved -Harus nol.

IInstallReferenceEnum antarmuka

The IInstallReferenceEnum antarmuka enumerates semua referensi yang ditetapkan pada Majelis dalam GAC.

CATATAN: Referensi ke Majelis terkunci untuk perubahan Sementara referensi tersebut sedang dihitung.
[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
				
Untuk mendapatkan contoh CreateInstallReferenceEnum API, panggilan CreateInstallReferenceEnum API, sebagai berikut:
STDAPI CreateInstallReferenceEnum(IInstallReferenceEnum **ppRefEnum, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
Parameter yang didefinisikan sebagai berikut:
  • ppRefEnum -Pointer ke lokasi memori yang menerima IInstallReferenceEnum pointer.
  • pName -Majelis nama yang referensi dihitung.
  • dwFlags -Harus nol.
  • pvReserved -Harus nol.

IInstallReferenceEnum::GetNextInstallReferenceItem metode

IInstallReferenceEnum::GetNextInstallReferenceItem kembali informasi referensi berikutnya untuk perakitan.
    HRESULT GetNextInstallReferenceItem
            (
            [out] IInstallReferenceItem **ppRefItem,
            [in]  DWORD dwFlags,
            [in]  LPVOID pvReserved
            );
				
Parameter yang didefinisikan sebagai berikut:
  • ppRefItem -Pointer ke lokasi memori yang menerima IInstallReferenceItem pointer.
  • dwFlags -Harus nol.
  • pvReserved -Harus nol.
Kembali nilai-nilai adalah sebagai berikut:
  • S_OK: -Item berikutnya kembali berhasil.
  • S_FALSE: -Tidak ada item yang lebih.

GetCachePath API

The GetCachePath API kembali lokasi penyimpanan GAC.
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
Parameter yang didefinisikan sebagai berikut:
  • dwCacheFlags -Sebenarnya salah satu bit yang didefinisikan dalam ASM_CACHE_FLAGS Pencacahan.
  • pwzCachePath -Pointer ke buffer yang menerima jalan GAC sebagai Unicode string.
  • pcchPath -Panjang pwszCachePath buffer, dalam Unicode karakter.
// ==++==
// 
//   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); ")
				

Properti

ID Artikel: 317540 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Kata kunci: 
kbbug kbdocerr kbpending kbmt KB317540 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:317540
Sanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan ?sebagaimana adanya? dan tidak akan diperbarui.

Berikan Masukan

 

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