/*
 * 功能:将dll保存到数据库中,然后取出来动态执行
 * 目的:隐藏一些代码到dll中(dll代码不会被反编译,比如用vc写的dll)
 * 作者:yx
 * 日期:2005-12-5
 */
using System;
using System.Data;
using System.Reflection;
using System.Data.SqlClient;
using System.IO;

class BB
{
 static string connString = "server=test;database=cqexpress;user id=sa;password=sa";

 static void Main()
 {
  //SaveDllToDB();
  SaveDllToDisk();
  TestDll();
 }

 static void TestDll()
 {
  Assembly aBox = Assembly.LoadFrom("1.aspx");//实际上是一个dll
  Type t = aBox.GetType("CSharpClassLibrary1.Class1"); 
  MethodInfo m = t.GetMethod("foo",BindingFlags.Public | BindingFlags.Instance);
  object o = Activator.CreateInstance(t);
  string i =(string) m.Invoke(o,null);

  Console.WriteLine(i);
 }

 static void SaveDllToDisk()
 {
  string FILE_NAME = "1.aspx";//dll名称,后缀任意
  if (File.Exists(FILE_NAME))
  {
   Console.WriteLine("{0} already exists!", FILE_NAME);
   return;
  }

  DataSet ds = new DataSet();

  string sqlString = "select DisplayMask from Forums where ForumID=1";

  SqlConnection conn = new SqlConnection(connString);
  conn.Open();

  SqlCommand com = new SqlCommand();
  com.CommandText = sqlString;

  com.Connection = conn;

  byte[] myData = (byte[])com.ExecuteScalar();

  FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew);
  BinaryWriter w = new BinaryWriter(fs);

  w.Write(myData);

  w.Close();
  fs.Close();

 }

 static void SaveDllToDB()
 {
  DataSet ds = new DataSet();

  string sqlString = "update Forums set DisplayMask=@dm where ForumID=1";//DisplayMask为image字段

  SqlConnection conn = new SqlConnection(connString);
  conn.Open();

  SqlCommand com = new SqlCommand();
  com.CommandText = sqlString;

  com.Connection = conn;

  string FileName ="1.dll";
  FileStream fs = new FileStream (FileName, FileMode.OpenOrCreate, FileAccess.Read);
  byte[] MyData = new byte[fs.Length];
  fs.Read(MyData, 0, (int)fs.Length);
  fs.Close();

  SqlParameter paramData = new SqlParameter( "@dm", SqlDbType.Binary );
  paramData.Value = MyData;
  com.Parameters.Add( paramData );

  com.ExecuteNonQuery();
 }




Type t = aBox.GetType("CSharpClassLibrary1.Class1");
注意这里的dll不要用c#写

posted on 2005-12-05 14:53  zacard  阅读(729)  评论(0)    收藏  举报