C# 读取(嵌入资源文件)

2010年01月06日 星期三 下午 09:17

public void LoadXMLFile()//从XML读取设置的信息
        {
            XmlTextReader reader;
            if (File.Exists("BlockSet.xml"))//判断文件是否存在
            {
                //首先读取硬盘里的BlockSet.xml文件
                reader = new XmlTextReader("BlockSet.xml");
            }
            else
            {
                //如果不存在 则从嵌入资源内读取 BlockSet.xml
                Assembly asm = Assembly.GetExecutingAssembly();//读取嵌入式资源
                Stream sm = asm.GetManifestResourceStream("Tetris.BlockSet.xml");
                reader = new XmlTextReader(sm);
            }
            string key = "";
            try
            {
                while(reader.Read())
                {
                    if(reader.NodeType==XmlNodeType.Element)
                    {
                        if (reader.Name == "id")
                        {
                            key = reader.ReadElementString().Trim();
                            info.Add(key, "");
                        }
                        else if(reader.Name=="color")
                        {
                            info[key] = reader.ReadElementString().Trim();
                        }
                        else if (reader.Name == "DownKey")
                        {
                            _downKey =(Keys)Convert.ToInt32(reader.ReadElementString().Trim());
                        }
                        else if (reader.Name == "DropKey")
                        {
                            _dropKey =(Keys)Convert.ToInt32(reader.ReadElementString().Trim());
                        }
                        else if (reader.Name == "MoveLeftKey")
                        {
                            _moveLeftKey = (Keys)Convert.ToInt32(reader.ReadElementString().Trim());
                        }
                        else if (reader.Name == "MoveRightKey")
                        {
                            _moveRightKey = (Keys)Convert.ToInt32(reader.ReadElementString().Trim());
                        }
                        else if (reader.Name == "DeasilRotateKey")
                        {
                            _deasilRotateKey = (Keys)Convert.ToInt32(reader.ReadElementString().Trim());
                        }
                        else if (reader.Name == "ContraRotateKey")
                        {
                            _contraRotateKey = (Keys)Convert.ToInt32(reader.ReadElementString().Trim());
                        }
                        else if (reader.Name == "CoorWidth")
                        {
                            coorWidth = Convert.ToInt32(reader.ReadElementString().Trim());
                        }
                        else if (reader.Name == "CoorHeight")
                        {
                            coorHight = Convert.ToInt32(reader.ReadElementString().Trim());
                        }
                        else if (reader.Name == "RectPix")
                        {
                            rectPix = Convert.ToInt32(reader.ReadElementString().Trim());
                        }
                        else if (reader.Name == "BackColor")
                        {
                            _backColor =Color.FromArgb(Convert.ToInt32(reader.ReadElementString().Trim()));
                        }
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            finally
            {
                if(reader!=null)
                {
                    reader.Close();
                }

 

 

 

 

 

二。

将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)

1. 我们有一个test.exe的WinForm程序,这是我们要加壳的目标程序。
2. 新建一个WinForm工程,删除Form1,然后新建一个类。如下。
3. 将test.exe 拷贝到该工程目录,作为嵌入式资源。
using System;
using System.Windows.Forms;
using System.Resources;
using System.Reflection;
using System.IO;
namespace test
{
    static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("test.Code.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);
        }
    }
}
编译后的程序会自动将资源中的目标文件加载运行。继续发挥一下,我们可以增加启动密码;将目标程序进

---------------------------------------------------------------------------------------------------

Stream   streamObj   =   this.GetType().Assembly.GetManifestResourceStream("Test_ExeInResource.AllTest.exe");  
   
byte[]   b   =   new   byte[streamObj.Length];  
streamObj.Read(b,   0,   b.Length);  
   
Assembly   a   =   Assembly.Load(b);  
Type[]   mytypes   =   a.GetTypes();  
BindingFlags   flags   =   (BindingFlags.NonPublic   |   BindingFlags.Public   |    
BindingFlags.Static   |   BindingFlags.Instance   |   BindingFlags.DeclaredOnly);  
   
foreach(Type   t   in   mytypes)  
{  
            MethodInfo[]   mi   =   t.GetMethods(flags);  
            Object   obj   =   Activator.CreateInstance(t);  
   
           foreach(MethodInfo   m   in   mi)  
           {  
                  if   (m.Name   ==   "Main")  
                 {  
                        MainDelegate   md   =    (MainDelegate)Delegate.CreateDelegate(typeof(MainDelegate),   m);  
                       md.BeginInvoke(null,   null);  
                }  
          }  
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值