2016-11-10 7 views
0

バイト配列に.net exeがあります。私は、アセンブリとしてそれをロードし、それが動作する、「hello」を出力し、いくつかの愚かなコマンドラインアプリです私のテストexeファイルの魔女で、それがエントリーポイントパラメータカウントexeエントリポイントの読み込み時に不一致C#

var assembly = System.Reflection.Assembly.Load(buff); 
var entryPoint = assembly.EntryPoint; 
var commandArgs = new string[0]; 
var returnValue = entryPoint.Invoke(null, new object[] { commandArgs }); 

だ呼び出そう。しかし、いくつかの他のサードパーティのexeでそれは失敗しますParameter Count Mismatch

at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 
    at ConsoleApplication1.Program.a() in C:\Documents and Settings\user\Desktop\OLD\ConsoleApplication8\ConsoleApplication8\Program.cs:line 211 
    at ConsoleApplication1.Program.Main(String[] args) in C:\Documents and Settings\user\Desktop\OLD\ConsoleApplication8\ConsoleApplication8\Program.cs:line 41 

なぜですか?

ここに私が知っているのは、exe - それは.netです、それはpublic static void main()メソッドを持っていて、それはエントリーポイントとして正しく識別されていて、比較的小さな単純なアプリケーションです。

+0

あなたが呼び出さ 'Main'方法を示すことができました。 –

+0

どういう意味ですか?基本となるMethodInfoオブジェクトを持つエントリポイントオブジェクトです。 ILSpyと逆にすると、次のようになります。using System; 名前空間J {\tパブリッククラス \t {\t \t [STAThread] \t \t公共の静的な無効メイン() \t \t { \t \t \t OK.ko()。 \t \t} \t}} – JDOE

+0

(メイン '公共の静的な無効)' main'メソッドは引数を取らない 'ので、あなたは、あなたの' commandArgs'引数を必要としないことを示唆しています。 'entryPoint.Invoke(null、new object [0]);'を試してください。 –

答えて

0
(あなたは、エントリポイントのいずれかのタイプの文字列[](例えば、 静的な無効メイン(文字列[]引数))の単一のパラメータとを宣言することができる.NETまたはそのような 静的ボイドメインとしてないPARAMATERS(と

)。 exeファイルはおそらく後者の方法を使用しているので、コマンドライン引数を渡すことはできません。少なくとも、エラーメッセージがあなたに伝えるものは間違った数のパラメータです。

だから、それを実行するために、あなたは、引数なしでそれを呼び出す必要があります:

var returnValue = entryPoint.Invoke(null, new object[] { }); 
関連する問題