C# wpf,winform修改另一个.net EXE程序集的resources 资源文件
可以使用Mono.Cecil库更新、添加可执行文件的资源
以下是使用 Mono.Cecil 进行资源操作的三种基本方法:
首先需要程序中引入 Mono.Cecil
Nuget:
PM> Install-Package Mono.Cecil
三种方法
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
下面是替换资源中的图像的示例
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());
C# wpf,winform修改另一个.net EXE程序集的resources 资源文件的更多相关文章
- Devexpress汉化修改 已经汉化过后生成的*.resources.dll文件 z
Devexpress 是很好的第三方控件.但是需要汉化,在从网上下载的zh-CN文件夹里都是*.resources.dll文件,由于汉化的工作量很大,难免有些地方汉化 错误或者不合适(如下图).花了些 ...
- WPF程序将DLL嵌入到EXE的两种方法
WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...
- C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式
C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式 C#实现自动启动的方法-两种方法 源码下载地址: ...
- C# Wpf异步修改UI,多线程修改UI(二)
1.使用定时器异步修改 这是相对比较简单的方法 在Wpf中定时器使用DiapatcherTimer,不使用Timer原因: 在一个应用程序中,Timer会重复生成time事件,而DispatcherT ...
- win7:你需要来自Administrators的权限才能对此文件进行修改的一个文件
win7:你需要来自Administrators的权限才能对此文件进行修改的一个文件 Posted on 2010-11-29 09:54 寒宵飞飞 阅读(36117) 评论(1) 编辑 收藏 新建一 ...
- 任务驱动,对比式学习.NET开发系列之开篇------开源2个小框架(一个Winform框架,一个Web框架)
一 源码位置 1. Winform框架 2. web框架 二 高效学习编程的办法 1 任务驱动方式学习软件开发 大部分人学习软件开发技术是通过看书,看视频,听老师上课的方式.这些方式有一个共同点即按知 ...
- WPF 3D模型的一个扩展方法
原文:WPF 3D模型的一个扩展方法 在WPF 3D中,我们常常需要改变一个ModelVisual3D对象的颜色. 先说说ModelVisual3D,本质上3D模型都是由一个个的三角形构成的,并且经过 ...
- 工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox
原文:工作记录--WPF自定义控件,实现一个可设置编辑模式的TextBox 1. 背景 因为最近在使用wpf开发桌面端应用,在查看页面需要把TextBox和Combox等控件设置为只读的.原本是个很简 ...
- 修改nw.js的exe文件使其请求管理员权限
修改nw.js的exe文件使其请求管理员权限 默认情况下,nw.js发布的nw.exe文件请求的是普通权限,当我们的应用需要访问一些特殊目录或者注册表等,就需要程序启动的时候以管理员权限运行.那么此时 ...
- WPF 只允许打开一个实例
我们有时候只希望我们的程序只打开一个实例,也就是我们的软件只有一次被打开. 那么我们可以通过一个办法知道,在这个软件打开前是不是打开过一个,还没关闭.也就是是否存在另一个程序在运行. 下面是一个简单方 ...
随机推荐
- mysql重置id排列重新排序
1.删除表中的原有的主键字段 ALTER TABLE table2 DROP id 2.表中重新创建一个字段 ALTER TABLE table2 ADD id int NOT NULL FIRST; ...
- SSAS部署失败方法总结
最近在自学SSAS,从最简单的入手,却频频遇到问题,为了以后在学习过程中能更快的进行问题的定位,所以在此将遇到的问题以及解决方案进行记录 Q1:数据源"Adventure Works DW2 ...
- Vue2.x 常用功能和方法
Vue 生命周期 beforeCreate (组件实例刚被创建,组件属性计算之前,如 data 属性等) created (组件实例创建完成, 属性已绑定,但 DOM 还未生成, $el 属性不存在) ...
- 题解:洛谷P3745 期末考试(整数三分)
题解:洛谷P3745 期末考试(整数三分) 题目传送门 题目大意:给出 \(n\) 个同学期望出成绩的时间限制 \(a_i\) 和 \(m\) 个学科公布成绩的初始时间 \(t_i\) ,1个同学每多 ...
- 国内985大学计算机方向硕博高性价比灌水的SCI期刊pr、kbs、eswa、ieee tii、ieee tiv具体都是啥?
国内985大学计算机方向硕博高性价比灌水的SCI期刊pr.kbs.eswa.ieee tii.ieee tiv,下面给出具体名称: Pattern Recognition(PR) Knowledge- ...
- Codeforces 909 A-F
CF909 题解 题目链接 A B C D E F 难度:红 黄 绿 蓝 绿 紫 题解 A 题目翻译:给定两个字符串,求字典序最小的"两字符串非空前缀拼接形成的字符串". 算法标签 ...
- JAVA 使用注解lombok@Builder和@Data,primary not found default constructor
由于添加@Builder会将@Data让类缺失无参构造器 应手动在实体中写构造函数并增加: @Tolerate 实体类名(){} 网上很多讲解 这里给一个我觉得讲的比较好的链接 https://www ...
- Codeforces Round 975 Div.2 C题 解析
C题 题目链接:Problem - C - Codeforces 题目描述 思路 对于这道题,首先我们能想到最小的组数肯定是数量最多的那个卡片的数量(mx),因为这个值的每一个卡片不能在同一个组里面. ...
- Linux之轨迹记录(script)
使用命令: script 编辑文件: vim /etc/profile 在最后一行添加命令 if [ $UID -ge 0 ]; then exec /usr/bin/script -t 2>/ ...
- 【docker-compose】Redis安装教程
仅供学习参考 ,请勿轻易在生产环境使用 0. 文件目录 下面的文件按照这个目录层级放置,首先创建 /docker/redis 文件夹,/docker/redis 对应下边图中 REDIS. 1. 创建 ...