static bool IsDotNetCoreBundle(string filename) { if (!PortableExecutableFileHelpers.IsPE(filename, out bool isExe, out bool hasDotNetMetadata)) { return(false); } if (!isExe || hasDotNetMetadata) { return(false); } try { using (var stream = File.OpenRead(filename)) { if (stream.Length < bundleSig.Length) { return(false); } stream.Position = stream.Length - bundleSig.Length; var sig = new byte[bundleSig.Length]; stream.Read(sig, 0, sig.Length); for (int i = 0; i < sig.Length; i++) { if (bundleSig[i] != sig[i]) { return(false); } } return(true); } } catch { } return(false); }
internal static bool IsDotNetCoreAppHostFilename(string filename) { if (!File.Exists(filename)) { return(false); } // We detect the apphost.exe like so: // - must have an exe extension // - must be a PE file and an EXE (DLL bit cleared) // - must not have .NET metadata // - must have a file with the same name but a dll extension // - this dll file must be a PE file and have .NET metadata if (!StringComparer.OrdinalIgnoreCase.Equals(Path.GetExtension(filename), ".exe")) { return(false); } var dllFilename = Path.ChangeExtension(filename, "dll"); if (!File.Exists(dllFilename)) { return(false); } if (!PortableExecutableFileHelpers.IsPE(filename, out bool isExe, out bool hasDotNetMetadata)) { return(false); } if (!isExe || hasDotNetMetadata) { return(false); } if (!PortableExecutableFileHelpers.IsPE(dllFilename, out _, out hasDotNetMetadata)) { return(false); } if (!hasDotNetMetadata) { return(false); } return(true); }