doc: รับการบันทึกสากลแอสเซมบลีแคช (GAC) APIs มีไม่ไว้ในเอกสารใน.NET Framework ซอฟต์แวร์พัฒนา Kit (SDK) ประกอบ

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 317540
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

อินเทอร์เฟซรหัสท้องถิ่นโปรแกรมประยุกต์โปรแกรมสำหรับ (APIs) ที่ช่วยให้คุณติดต่อด้วยการสากลแอสเซมบลีแคช (GAC) จะได้รับการบันทึกไว้ไม่ในคู่มือ.NET Framework ซอฟต์แวร์พัฒนา Kit (SDK)

ข้อมูลเพิ่มเติม

ข้อควรระวัง: ไม่ได้ใช้ APIs เหล่านี้ในโปรแกรมประยุกต์ของคุณ เพื่อดำเนินการแอสเซมบลี binds หรือ การทดสอบสำหรับการแสดงของแอสเซมบลี หรืออื่น ๆ รันไทม์ การพัฒนา หรือการดำเนินการขณะออกแบบ เฉพาะเครื่องมือการดูแลระบบและการตั้งค่าโปรแกรมต้องใช้ APIs เหล่านี้ ถ้าคุณใช้ GAC นี้โดยตรง exposes fragility การรวมแอสเซมบลีที่โปรแกรมประยุกต์ของคุณ หรืออาจทำให้โปรแกรมประยุกต์ของคุณทำงานไม่ถูกต้องใน.NET Framework รุ่นต่อ ๆ ไป

GAC เก็บแอสเซมบลีที่ใช้ร่วมกันระหว่างโปรแกรมประยุกต์ทั้งหมดบนคอมพิวเตอร์ สถานที่เก็บที่แท้จริงและโครงสร้างของ GAC การรับการบันทึกจะไม่ไว้ และไม่ต้องการเปลี่ยนแปลงใน.NET Framework และระบบปฏิบัติการ Microsoft Windows รุ่นต่อ ๆ ไป

วิธีการได้รับการสนับสนุนเฉพาะกับแอสเซมบลีของการเข้าถึงใน GAC ไม่ผ่าน APIs ที่ได้รับการบันทึกไว้ในบทความนี้

แอปพลิเคชันโดยส่วนใหญ่ไม่มีการใช้ APIs เหล่านี้ได้เนื่องจากแอสเซมบลีที่ผูกอยู่ทำได้โดยอัตโนมัติ โดยการใช้งานจริงภาษาทั่วไป เฉพาะโปรแกรมที่ติดตั้งแบบกำหนดเองหรือเครื่องมือการจัดการต้องใช้ APIs เหล่านี้ Microsoft Windows Installer มีการสนับสนุนสำหรับการติดตั้งแอสเซมบลีเพื่อ GAC แบบดั้งเดิม

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแอสเซมบลีและ GAC นั้น ให้ดูที่ SDK Framework ของ.NET

ใช้ GAC API ในสถานการณ์ต่อไปนี้:
  • เมื่อคุณติดตั้งแอสเซมบลีเพื่อ GAC
  • เมื่อคุณลบแอสเซมบลีจาก GAC
  • เมื่อคุณเอ็กซ์ปอร์ตแอสเซมบลีจาก GAC
  • เมื่อคุณระบุแอสเซมบลีที่พร้อมใช้งานในแบบ GAC
หมายเหตุ::CoInitialize(Ex)ต้องถูกเรียกก่อนที่คุณใช้ใด ๆ ของฟังก์ชันและอินเทอร์เฟซที่อธิบายไว้ในข้อมูลจำเพาะเกี่ยวกับการทำงานนี้

อินเทอร์เฟซ IAssemblyCache

กระบวนการIAssemblyCacheอินเทอร์เฟซมีอินเทอร์เฟซที่ระดับสูงสุดที่ให้การเข้าถึงแบบ GAC

การขอรับอินสแตนซ์ของการCreateAssemblyCacheAPI เรียกการCreateAssemblyCacheAPI ดัง:
STDAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved); 
พารามิเตอร์กำหนดไว้เป็นดังนี้:
  • ppAsmCache - ตัวชี้เพื่อย้อนกลับIAssemblyCache
  • dwReserved

โครงสร้าง FUSION_INSTALL_REFERENCE

กระบวนการfusion_install_referenceโครงสร้างแสดงการอ้างอิงที่เกิดขึ้นเมื่อโปรแกรมประยุกต์ได้ติดตั้งแอสเซมบลีใน 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;
				
เขตข้อมูลของโครงสร้างกำหนดไว้เป็นดังนี้:
  • cbSize-ขนาดโครงสร้างเป็นไบต์
  • dwFlags-จอง ต้องเป็นศูนย์
  • guidScheme-หน่วยงานที่เพิ่มการอ้างอิง
  • szIdentifier-เป็นสตริงเฉพาะที่ระบุโปรแกรมประยุกต์ที่ติดตั้งแอสเซมบลี
  • szNonCannonicalData-เป็นสายอักขระที่เข้าใจเฉพาะ โดยหน่วยงานที่เพิ่มการอ้างอิง GAC จัดเก็บข้อความนี้เท่านั้น
สุดค่าสำหรับการguidSchemeฟิลด์สามารถเป็นหนึ่งต่อไปนี้:
  • fusion_refcount_msi_guid-มีการอ้างอิงแอสเซมบลีการ โดยโปรแกรมประยุกต์ที่มีการติดตั้ง โดยใช้ตัวติดตั้ง Windows กระบวนการszIdentifierฟิลด์ถูกกำหนดเป็นmsiและszNonCannonicalDataตั้งค่าเป็นWindows Installer. โครงร่างนี้ต้องเท่านั้นใช้ โดย Windows Installer เอง
  • fusion_refcount_uninstall_subkey_guid-มีการอ้างอิงแอสเซมบลีการ โดยโปรแกรมประยุกต์ที่ปรากฏขึ้นในเพิ่ม/เอาโปรแกรมออก. กระบวนการszIdentifierฟิลด์มีโทเค็นที่ใช้ในการลงทะเบียนโปรแกรมประยุกต์ด้วยเพิ่ม/เอาโปรแกรมออก.
  • fusion_refcount_filepath_guid-มีการอ้างอิงแอสเซมบลีการ โดยโปรแกรมประยุกต์ที่แทน โดยแฟ้มในระบบแฟ้ม กระบวนการszIdentifierฟิลด์เป็นเส้นทางไปยังแฟ้มนี้
  • fusion_refcount_opaque_string_guid-มีการอ้างอิงแอสเซมบลีการ โดยโปรแกรมประยุกต์ที่มีแสดงเฉพาะ โดยสตริ opaque กระบวนการszIdentifierเป็นสตริงที่ opaque นี้ GAC ไม่ทำการตรวจสอบการอ้างอิง opaque เมื่อคุณลบนี้การมีอยู่

โครงสร้าง ASSEMBLY_INFO

กระบวนการassembly_infoโครงสร้างแสดงข้อมูลเกี่ยวกับแอสเซมบลีในแคชแอสเซมบลี

เขตข้อมูลของโครงสร้างกำหนดไว้เป็นดังนี้:
  • cbAssemblyInfo-ขนาดของโครงสร้างเป็นไบต์ อนุญาตให้เพิ่มไปยังโครงสร้างใน.NET Framework รุ่นในอนาคต
  • dwAssemblyFlags-แสดงอย่างน้อยหนึ่งอย่างassemblyinfo_flag_ *บิต
  • uliAssemblySizeInKB-ขนาดของแฟ้มที่ประกอบกันแอสเซมบลีกิโลไบต์ (KB)
  • pszCurrentAssemblyPathBuf- A pointer to a string buffer that holds the current path of the directory that contains the files that make up the assembly. The path must end with a zero.
  • cchBuf- Size of the buffer that thepszCurrentAssemblyPathBugfield points to.
dwAssemblyFlagscan have one of the following values:
  • ASSEMBLYINFO_FLAG__INSTALLED- Indicates that the assembly is actually installed. Always set in current version of the .NET Framework.
  • ASSEMBLYINFO_FLAG__PAYLOADRESIDENT- Never set in the current version of the .NET Framework.

IAssemblyCache::UninstallAssembly Method

กระบวนการIAssemblyCache::UninstallAssemblymethod removes a reference to an assembly from the GAC. If other applications hold no other references to the assembly, the files that make up the assembly are removed from the GAC.
    HRESULT UninstallAssembly(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData, 
        [out, optional] ULONG *pulDisposition
        );

				
The parameters are defined as follows:
  • dwFlags- No flags defined. Must be zero.
  • pszAssemblyName- The name of the assembly. A zero-ended Unicode string.
  • pRefData- A pointer to aFUSION_INSTALL_REFERENCEโครงสร้าง Although this is not recommended, this parameter can be null. The assembly is installed without an application reference, or all existing application references are gone.
  • pulDisposition- Pointer to an integer that indicates the action that is performed by the function.
หมายเหตุ:: ถ้าpulDispositionis not null,pulDispositioncontains one of the following values:
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED- The assembly files have been removed from the GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE- An application is using the assembly. This value is returned on Microsoft Windows 95 and Microsoft Windows 98.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED- The assembly does not exist in the GAC.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING- Not used.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES- The assembly has not been removed from the GAC because another application reference exists.
  • IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND- The reference that is specified inpRefDatais not found in the GAC.
The return values are defined as follows:
  • S_OK- The assembly has been uninstalled.
  • S_FALSE- The operation succeeded, but the assembly was not removed from the GAC. The reason is described inpulDisposition.

IAssemblyCache::QueryAssemblyInfo Method

กระบวนการIAssemblyCache::QueryAssemblyInfomethod retrieves information about an assembly from the GAC.
    HRESULT QueryAssemblyInfo(
        [in] DWORD dwFlags,
        [in] LPCWSTR pszAssemblyName,
        [in, out] ASSEMBLY_INFO *pAsmInfo
        );
				
The parameters are defined as follows:
  • dwFlags- One ofQUERYASMINFO_FLAG_VALIDATEหรือQUERYASMINFO_FLAG_GETSIZE:
    • *_VALIDATE- Performs validation of the files in the GAC against the assembly manifest, including hash verification and strong name signature verification.
    • *_GETSIZE- Returns the size of all files in the assembly (disk footprint). If this is not specified, theASSEMBLY_INFO::uliAssemblySizeInKBfield is not modified.
  • pszAssemblyName- Name of the assembly that is queried.
  • pAsmInfo- Pointer to the returnedASSEMBLY_INFOโครงสร้าง

IAssemblyCache::InstallAssembly Method

กระบวนการIAssemblyCache::InstallAssemblymethod adds a new assembly to the GAC. The assembly must be persisted in the file system and is copied to the GAC.
    HRESULT InstallAssembly( // If you use this, fusion will do the streaming & commit.
        [in] DWORD dwFlags,
        [in] LPCWSTR pszManifestFilePath, 
        [in] LPCFUSION_INSTALL_REFERENCE pRefData
        );
				
The parameters are defined as follows:
  • dwFlags- At most, one of the bits of theIASSEMBLYCACHE_INSTALL_FLAG_*ค่าสามารถระบุ:
    • * _refresh-ถ้าแอสเซมบลีที่ถูกติดตั้งแล้ว ใน GAC การและแฟ้มหมายเลขเวอร์ชันของแอสเซมบลีที่มีการติดตั้งจะเหมือนกัน หรือในภายหลัง การแทนแฟ้ม
    • * _force_refresh-แฟ้มของแอสเซมบลีที่มีอยู่จะถูกเขียนทับคำนึงถึงหมายเลขรุ่นของตนเอง
  • pszManifestFilePath-สายอักขระชี้ไปที่ไลบราลิงค์ dynamic รี (DLL) ที่ประกอบด้วยรายการของแอสเซมบลี แฟ้มแอสเซมบลีอื่น ๆ ต้องอยู่ในไดเรกทอรีเดียวกันเป็น DLL ที่ประกอบด้วยรายการของแอสเซมบลี
  • pRefData-ตัวชี้ไปfusion_install_referenceที่บ่งชี้ว่า โปรแกรมประยุกต์ในนามซึ่งมีแอสเซมบลีกำลังติดตั้งอยู่ แม้ว่าซึ่งไม่แนะนำ พารามิเตอร์นี้สามารถเป็น null แต่นี้ออกจากแอสเซมบลีโดยไม่มีการอ้างอิงแอพลิเคชัน

อินเทอร์เฟซ IAssemblyName

กระบวนการIAssemblyNameอินเทอร์เฟซแทนชื่อแอสเซมบลี ชื่อแอสเซมบลีมีชุดของค่าชื่อคู่ predetermined ชื่อแอสเซมบลีที่อธิบายไว้ในรายละเอียดใน SDK Framework ของ.NET
[
        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รหัสคุณสมบัติการแจงนับอธิบายชื่อคู่ค่าชื่อในชื่อแอสเซมบลีถูกต้อง ดู SDK Framework .NET สำหรับคำอธิบายของคุณสมบัติเหล่านี้
    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เมธอด freezes มีชื่อแอสเซมบลี การเรียกเพื่อเพิ่มเติมIAssemblyName::SetPropertyจะไม่สำเร็จหลังจากที่เรียกว่าวิธีนี้
HRESULT Finalize();

วิธีการ IAssemblyName::GetDisplayName

กระบวนการIAssemblyName::GetDisplayNameวิธีการส่งกลับค่าการแสดงสตริงที่ชื่อแอสเซมบลี
    HRESULT  GetDisplayName(
        [out]       LPOLESTR  szDisplayName,
        [in, out]   LPDWORD   pccDisplayName,
        [in]        DWORD     dwDisplayFlags);
				
พารามิเตอร์กำหนดไว้เป็นดังนี้:
  • szDisplayName-ตัวชี้การบัฟเฟอร์ที่ไม่มีชื่อที่แสดง ชื่อที่แสดงมีการส่งคืนใน Unicode
  • 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:- The names match according to the comparison criteria.
  • S_FALSE:- The names do not match.

IAssemblyName::Clone Method

กระบวนการIAssemblyName::Clonemethod creates a copy of an assembly name.
    HRESULT Clone(
        [out] IAssemblyName **pName);
				

IAssemblyEnum Interface

กระบวนการIAssemblyEnuminterface enumerates the assemblies in the GAC.
 [
        local,
        object,
        uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
        pointer_default(unique)
]
interface IAssemblyEnum : IUnknown
				
การขอรับอินสแตนซ์ของการCreateAssemblyEnumAPI เรียกการCreateAssemblyNameObjectAPI ดัง:
STDAPI CreateAssemblyEnum(IAssemblyEnum **pEnum, IUnknown *pUnkReserved, IAssemblyName *pName, DWORD dwFlags, LPVOID pvReserved);
พารามิเตอร์กำหนดไว้เป็นดังนี้:
  • pEnum- Pointer to a memory location that contains theIAssemblyEnumpointer.
  • pUnkReserved- Must be null.
  • pName- An assembly name that is used to filter the enumeration. Can be null to enumerate all assemblies in the GAC.
  • dwFlags- Exactly one bit from theASM_CACHE_FLAGSenumeration.
  • pvReserved- Must be NULL.

ASM_CACHE_FLAGS Enumeration

กระบวนการASM_CACHE_FLAGSenumeration contains the following values:
  • ASM_CACHE_ZAP- Enumerates the cache of precompiled assemblies by using Ngen.exe.
  • ASM_CACHE_GAC- Enumerates the GAC.
  • ASM_CACHE_DOWNLOAD- Enumerates the assemblies that have been downloaded on-demand or that have been shadow-copied.
IAssemblyName::GetDisplayName
typedef enum
{
    ASM_CACHE_ZAP            = 0x1,
    ASM_CACHE_GAC            = 0x2,
    ASM_CACHE_DOWNLOAD       = 0x4
} ASM_CACHE_FLAGS;
				

IAssemblyEnum::GetNextAssembly Method

กระบวนการIAssemblyEnum::GetNextAssemblymethod enumerates the assemblies in the GAC.
    HRESULT GetNextAssembly
    (
        [in]                  LPVOID                pvReserved,
        [out]                 IAssemblyName       **ppName,
        [in]                  DWORD                 dwFlags
    );
				
พารามิเตอร์กำหนดไว้เป็นดังนี้:
  • pvReserved- Must be null.
  • ppName- Pointer to a memory location that is to receive the interface pointer to the assembly name of the next assembly that is enumerated.
  • dwFlags- Must be zero.

IInstallReferenceItem Interface

กระบวนการIInstallReferenceIteminterface represents a reference that has been set on an assembly in the GAC. Instances ofIInstallReferenceIteamส่งกลับโดย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อินเทอร์เฟซระบุการอ้างอิงทั้งหมดที่มีการตั้งค่าบนแอสเซมบลีใน GAC

หมายเหตุ:: อ้างอิงที่อยู่ในแอสเซมบลีที่ถูกล็อกเพื่อเปลี่ยนแปลงในขณะที่การอ้างอิงเหล่านั้นจะมีการระบุ
[
        local,
        object,
        uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
        pointer_default(unique)
]
interface IInstallReferenceEnum : IUnknown
				
การขอรับอินสแตนซ์ของการCreateInstallReferenceEnumAPI เรียกการCreateInstallReferenceEnumAPI ดัง:
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

กระบวนการGetCachePathAPI ส่งกลับค่าตำแหน่งที่เก็บของ GAC
STDAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath);
พารามิเตอร์กำหนดไว้เป็นดังนี้:
  • dwCacheFlags-ทุกประการหนึ่งบิตกำหนดไว้ในนั้นasm_cache_flagsการแจงนับ
  • pwzCachePath-ตัวชี้เพื่อบัฟเฟอร์ที่มีการรับเส้นทางของ GAC เป็นสายอักขระแบบ Unicode
  • pcchPath-ความยาวของการpwszCachePathบัฟเฟอร์ ในอักขระ Unicode
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
//+---------------------------------------------------------------------------
// 
//  Microsoft Windows
//  File:       fusion.idl
// 
//  Contents:   Fusion Interfaces
// 
//  Classes:
// 
//  Functions:
// 
// 
//----------------------------------------------------------------------------
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// fusion.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Copyright (c) Microsoft Corporation.  All rights reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("#ifdef _MSC_VER")
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("//---------------------------------------------------------------------------=")
cpp_quote("// Fusion Interfaces.")
cpp_quote("")

import "objidl.idl";

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

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


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

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

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

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


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

    typedef const FUSION_INSTALL_REFERENCE  *LPCFUSION_INSTALL_REFERENCE;


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

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

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

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

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

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

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

}


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

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

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

}



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

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

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

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

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

    HRESULT Finalize();

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

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


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

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

}

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

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

    HRESULT Reset(void);

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


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

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

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

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

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

คุณสมบัติ

หมายเลขบทความ (Article ID): 317540 - รีวิวครั้งสุดท้าย: 13 มกราคม 2554 - Revision: 3.0
Keywords: 
kbbug kbdocerr kbpending kbmt KB317540 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:317540
การปฏิเสธความรับผิดชอบในเนื้อหาของ KB ที่จะไม่มีการปรับปรุงอีกต่อไป
บทความนี้กล่าวถึงผลิตภัณฑ์ที่ Microsoft ไม่มีการสนับสนุนอีกต่อไป เนื้อหาของบทความจึงมีการนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก

ให้ข้อเสนอแนะ

 

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