internal ExecutableManifest(SafeLoadLibraryHandle hModule, string fullpath, IntPtr hName) { FullPath = fullpath; IntPtr hResHandle = Win32NativeMethods.FindResource(hModule, hName, new IntPtr((int)ResType.MANIFEST)); if (hResHandle == IntPtr.Zero) { throw new ArgumentException("Can't find manifest resource"); } IntPtr hResource = Win32NativeMethods.LoadResource(hModule, hResHandle); IntPtr buf = Win32NativeMethods.LockResource(hResource); int size = Win32NativeMethods.SizeofResource(hModule, hResHandle); if (size <= 0) { throw new ArgumentException("Invalid manifest size"); } byte[] manifest = new byte[size]; Marshal.Copy(buf, manifest, 0, size); MemoryStream stm = new MemoryStream(manifest); try { XmlDocument doc = LoadDocument(stm); UiAccess = GetUiAccess(doc); AutoElevate = GetAutoElevate(doc); ExecutionLevel = GetExecutionLevel(doc); LongPathAware = GetLongPathAware(doc); XmlWriterSettings settings = new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true, NewLineOnAttributes = true }; StringWriter string_writer = new StringWriter(); XmlWriter writer = XmlWriter.Create(string_writer, settings); doc.Save(writer); ManifestXml = string_writer.ToString(); } catch (XmlException) { ParseError = true; ManifestXml = Encoding.UTF8.GetString(stm.ToArray()); } }