public static void ReadCache(ArrayList alAssems, String name, uint nFlag) { SafeFusionHandle aEnum = null; SafeFusionHandle aNameEnum = null; SafeFusionHandle AppCtx = SafeFusionHandle.InvalidHandle; int hr; if (name != null) { hr = Win32Native.CreateAssemblyNameObject(out aNameEnum, name, CANOF.PARSE_DISPLAY_NAME, IntPtr.Zero); if (hr != 0) { Marshal.ThrowExceptionForHR(hr); } } using (aNameEnum) { hr = Win32Native.CreateAssemblyEnum(out aEnum, AppCtx, aNameEnum, nFlag, IntPtr.Zero); if (hr != 0) { Marshal.ThrowExceptionForHR(hr); } using (aEnum) { for (;;) { using (SafeFusionHandle aAppCtx = new SafeFusionHandle(), aName = new SafeFusionHandle()) { if (!GetNextAssembly(aEnum, aAppCtx, aName, 0)) { break; } String sDisplayName = GetDisplayName(aName, 0); if (sDisplayName == null) { continue; } alAssems.Add(sDisplayName); } } } // using (aEnum) } // using (aNameEnum) }
static extern String GetDisplayName(SafeFusionHandle pName, uint dwDisplayFlags);
internal static extern int CreateAssemblyEnum(out SafeFusionHandle ppEnum, SafeFusionHandle pAppCtx, SafeFusionHandle pName, uint dwFlags, IntPtr pvReserved);
static extern bool GetNextAssembly(SafeFusionHandle pEnum, SafeFusionHandle pAppCtx, SafeFusionHandle pName, uint dwFlags);
internal static extern int CreateAssemblyNameObject(out SafeFusionHandle ppEnum, String szAssemblyName, uint dwFlags, IntPtr pvReserved);