C# 从Resources资源中启动应用程序,应用程序简单加壳,导出Resources中的资源为文件
2016-05-26 22:34
801 查看
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; using System.Windows.Forms; namespace Packers { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> //[STAThread] //static void Main() //{ // Application.EnableVisualStyles(); // Application.SetCompatibleTextRenderingDefault(false); // Application.Run(new Form1()); //} //[STAThread] //static void Main(string[] args) //{ // Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Packers.easyIcon.exe"); // byte[] bs = new byte[stream.Length]; // stream.Read(bs, 0, (int)stream.Length); // Assembly asm = Assembly.Load(bs); // MethodInfo info = asm.EntryPoint; // ParameterInfo[] parameters = info.GetParameters(); // if ((parameters != null) && (parameters.Length > 0)) // info.Invoke(null, (object[])args); // else // info.Invoke(null, null); //} [STAThread] static void Main(string[] args) { // 从附件启动应用程序,应用程序简单加壳 byte[] rar = Properties.Resources.dat.ToArray<byte>(); Assembly.Load(rar).EntryPoint.Invoke(null, null); } } }将要加壳的应用程序重命名,并添加到Resources中:
[STAThread] static void Main(string[] args) { // 从附件启动应用程序,应用程序简单加壳 byte[] rar = Properties.Resources.dat.ToArray<byte>(); Assembly.Load(rar).EntryPoint.Invoke(null, null); }示例项目:http://git.oschina.net/scimence/Packers
从Resources中,导出资源为文件:
/// <summary> /// 导出资源为文件示例 /// </summary> static void exportFile() { Byte[] array = Properties.Resources.easyIcon.ToArray<Byte>(); // easyIcon.exe添加到Resources中对应的资源 SaveFile(array, @"D:\easyIcon.exe"); // 导出Resources中的资源为文件 } /// <summary> /// 保存Byte数组为文件 /// </summary> private static void SaveFile(Byte[] array, string path) { // 创建输出流 System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create); //将byte数组写入文件中 fs.Write(array, 0, array.Length); fs.Close(); }
附录:
/// <summary>
/// 更新文件逻辑,判定文件是否处于运行状态,关闭并删除后,创建新的文件
/// </summary>
private static void outPutFile(Byte[] array, string pathName)
{
// 若文件正在运行,则从进程中关闭
string fileName = System.IO.Path.GetFileName(pathName);
KillProcess(fileName);
// 删除原有文件
if (System.IO.File.Exists(pathName)) System.IO.File.Delete(pathName);
// 保存新的文件
SaveFile(array, pathName);
}
/// <summary>
/// 关闭名称为processName的所有进程
/// </summary>
public static void KillProcess(string processName)
{
Process[] processes = Process.GetProcessesByName(processName);
foreach (Process process in processes)
{
if (process.MainModule.FileName == processName)
{
process.Kill();
}
}
}
相关文章推荐
- Quartz.NET c# 教程 - 课程四:Triggers
- 《Head First C#》学习 ---第二章总结
- 字符串反转C#的实现
- C# 软件下载插件,软件自动更新功能实现,通过cmd命令调用应用程序,应用程序实现单例启动
- C#中的InitializeComponent()方法
- C# ThreadPool 线程同步
- C#函数式编程之递归调用
- C#函数式编程之序列
- C#函数式编程之可选值
- C#函数式编程之标准高阶函数
- 30天C#基础巩固------了解委托,string练习
- C# MVC4 QRCode二维码生成
- 一个输入指定盘符和文件名检索文件存在路径的c#程序
- C#匿名函数的坑
- C# 将时间戳 byte[] 转换成 datetime 的几个方法
- C# ThreadPool的简单用法
- C# webservices 之自定义编写发布【2】
- C# 读取Excel文件里面的内容到DataSet
- 【转】C# Linq 交集、并集、差集、去重
- C# 时间格式