C# wpf,winform修改另一个.net EXE程序集的resources 资源文件

可以使用Mono.Cecil库更新、添加可执行文件的资源
以下是使用 Mono.Cecil 进行资源操作的三种基本方法:

Copy
首先需要程序中引入 Mono.Cecil Nuget: PM> Install-Package Mono.Cecil

三种方法#

Copy
public static void ReplaceResource(string path, string resourceName, byte[] resource) { var definition = AssemblyDefinition.ReadAssembly(path); for (var i = 0; i < definition.MainModule.Resources.Count; i++) if (definition.MainModule.Resources[i].Name == resourceName) { definition.MainModule.Resources.RemoveAt(i); break; } var er = new EmbeddedResource(resourceName, ManifestResourceAttributes.Public, resource); definition.MainModule.Resources.Add(er); definition.Write(path); } public static void AddResource(string path, string resourceName, byte[] resource) { var definition = AssemblyDefinition.ReadAssembly(path); var er = new EmbeddedResource(resourceName, ManifestResourceAttributes.Public, resource); definition.MainModule.Resources.Add(er); definition.Write(path); } public static MemoryStream GetResource(string path, string resourceName) { var definition = AssemblyDefinition.ReadAssembly(path); foreach (var resource in definition.MainModule.Resources) if (resource.Name == resourceName) { var embeddedResource =(EmbeddedResource) resource; var stream = embeddedResource.GetResourceStream(); var bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); var memStream = new MemoryStream(); memStream.Write(bytes,0,bytes.Length); memStream.Position = 0; return memStream; } return null; }

您可以读取/写入或修改当前资源或创建新资源,然后只需通过调用 或添加它作为新资源调用即可将其放回可执行文件ResourceWriter、ResourceReader、ResourceEditor

下面是替换资源中的图像的示例#

Copy
var ms = new MemoryStream(); var writer = new ResourceWriter(ms); writer.AddResource("good_luck",new Bitmap("good_luck.png")); writer.Generate(); ReplaceResource(@"my executale.exe", "ResourceTest.Properties.Resources.resources",ms.ToArray());
posted @   Monns  阅读(1515)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
CONTENTS