diff --git a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs index 4899e024a..469542dff 100644 --- a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs +++ b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs @@ -193,6 +193,10 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler var (itemType, fileName) = files.FirstOrDefault(t => t.itemType == "ApplicationIcon"); if (fileName != null) xml.WriteElementString("ApplicationIcon", fileName); + + (itemType, fileName) = files.FirstOrDefault(t => t.itemType == "ApplicationManifest"); + if (fileName != null) + xml.WriteElementString("ApplicationManifest", fileName); } static void WriteResources(XmlTextWriter xml, IEnumerable<(string itemType, string fileName)> files) diff --git a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/WholeProjectDecompiler.cs b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/WholeProjectDecompiler.cs index 729958c08..669b21b05 100644 --- a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/WholeProjectDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/WholeProjectDecompiler.cs @@ -370,19 +370,20 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler #endregion #region WriteMiscellaneousFilesInProject - const int RT_ICON = 3; - const int RT_GROUP_ICON = 14; - protected virtual IEnumerable<(string itemType, string fileName)> WriteMiscellaneousFilesInProject(PEFile module) { var resources = module.Reader.ReadWin32Resources(); if (resources == null) yield break; - byte[] icon = CreateIcon(resources); - File.WriteAllBytes(Path.Combine(TargetDirectory, "app.ico"), icon); + byte[] appIcon = CreateApplicationIcon(resources); + File.WriteAllBytes(Path.Combine(TargetDirectory, "app.ico"), appIcon); yield return ("ApplicationIcon", "app.ico"); + byte[] appManifest = CreateApplicationManifest(resources); + File.WriteAllBytes(Path.Combine(TargetDirectory, "app.manifest"), appIcon); + yield return ("ApplicationManifest", "app.manifest"); + var appConfig = module.FileName + ".config"; if (File.Exists(appConfig)) { @@ -391,7 +392,10 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler } } - unsafe static byte[] CreateIcon(Win32ResourceDirectory resources) + const int RT_ICON = 3; + const int RT_GROUP_ICON = 14; + + unsafe static byte[] CreateApplicationIcon(Win32ResourceDirectory resources) { var iconGroup = resources.Find(new Win32ResourceName(RT_GROUP_ICON))?.Directories.FirstOrDefault()?.Datas.FirstOrDefault()?.Data; if (iconGroup == null) @@ -466,6 +470,13 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler public uint dwBytesInRes; public short nID; }; + + const int RT_MANIFEST = 24; + + unsafe static byte[] CreateApplicationManifest(Win32ResourceDirectory resources) + { + return resources.Find(new Win32ResourceName(RT_MANIFEST))?.Directories.FirstOrDefault()?.Datas.FirstOrDefault()?.Data; + } #endregion ///