2013-10-08 183 views
0
System.Resources.ResourceManager ResManager 
    = new System.Resources.ResourceManager(
     "derp", 
     System.Reflection.Assembly.GetExecutingAssembly()); 

byte[] cmBytes 
    = System.Convert.FromBase64String((string)ResManager.GetObject("cFile")); 

/*BinaryWriter bw1 
     = new BinaryWriter(new FileStream("test.exe", FileMode.Create)); 
    bw1.Write(cmBytes); 
    bw1.Flush(); 
    bw1.Close();*/ 

Assembly asm = Assembly.Load(cmBytes); 
MethodInfo mi = asm.EntryPoint; 
object go = asm.CreateInstance(mi.Name); 
mi.Invoke(go, null); 

錯誤指向mi.Invoke(go, null),我在這裏難倒了。System.Reflection.TargetParameterCountExeception:參數計數不匹配

+1

可能是調用函數被某個代理引用,它的參數數量不同於指定的 –

+0

爲什麼你回滾我的編輯?你的代碼片段不方便閱讀水平滾動條。 – BartoszKP

回答

0

在這種情況下,一個入口點需要參數 - 如例外情況所示(可能是一個字符串列表),所以顯然你不能在沒有參數的情況下調用它(第二個參數爲null)。嘗試:

mi.Invoke(go, new object[] { new string[0] }); 

請注意,這當然只適用於入口點接受字符串列表的組件。根據你想要運行的程序集的類型,你可能需要添加更多的邏輯。你也可以在程序集中有static void Main(),所以你的版本可以工作。