Browse Source

write app manifest

pull/2186/head
文煌 5 years ago committed by Siegfried Pammer
parent
commit
4a8cca26a1
  1. 4
      ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs
  2. 23
      ICSharpCode.Decompiler/CSharp/ProjectDecompiler/WholeProjectDecompiler.cs

4
ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs

@ -193,6 +193,10 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler @@ -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)

23
ICSharpCode.Decompiler/CSharp/ProjectDecompiler/WholeProjectDecompiler.cs

@ -370,19 +370,20 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler @@ -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 @@ -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 @@ -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
/// <summary>

Loading…
Cancel
Save