2010-05-22 1 views
0

мне нужно вызвать метод из исполняемого файлаВыполнить метод из исполняемого файла

ProcessStartInfo startInfo = new ProcessStartInfo(@"exeParser.exe"); 

     startInfo.WindowStyle = ProcessWindowStyle.Normal; 
     startInfo.CreateNoWindow = false; 
     startInfo.RedirectStandardOutput = true; 
     startInfo.UseShellExecute = false; 


     startInfo.Arguments = ?? 

Я не знаю, как вызвать метод и передать параметры

Любой помощи, пожалуйста ??

Исполняемый моя, но у меня возникают проблемы, используя вещи в веб-приложения, так что я подумал, что было бы лучше не называть его как процесс

Благодаря

+0

Прошло много лет с тех пор, как я скомпилировал свой последний файл .exe, чтобы я мог ошибаться, но возможно ли это? На самом деле я так не думаю. –

+0

Я тоже не знаю:/ – Lilz

ответ

1

Исполняемые файлы имеют только одну точку входа, обычно называемую «Главная».

Чтобы вызвать конкретный метод, приложение должно было бы выставить аргумент командной строки (или несколько) для имени метода и его аргументов. Это означало бы изменение приложения для интерпретации этих аргументов и вызов соответствующего метода.

Вам нужно будет изменить свой «exeParser», чтобы принимать аргументы, а затем действовать на них.

Например вы могли бы добавить:

\ метод [имя] \ аргументы [1], [2], [3]

Затем разобрать это, чтобы получить имя и список аргументов.

Если у вас есть только один или два метода, вы можете жёстко переключатель:

switch (methodName) 
{ 
    case "add": 
     result = this.Add(arg1, arg2); 
     break; 
    case "subtract": 
     result = this.Subtract(arg1, arg2); 
     break; 
    default: 
     break; 
} 

Если у вас есть больше или хотите, чтобы сделать код более универсальным, то вы должны были бы использовать отражение, чтобы получить метод и назови это.

+0

Вот что я пытаюсь сделать. Я пытаюсь назвать этот exe из проекта. отправлять параметры и получать результаты. – Lilz

+0

@Lily - тогда вам нужно выяснить, какие аргументы принимает 'exeParser'. У вас есть документация? – ChrisF

+0

Я создал его сам, поэтому я могу заставить его принять что угодно. Я использую его для Proxem Antelope api Я понятия не имею, как вернуть результат, поскольку main будет возвращать только void – Lilz

0

Вы не можете, если метод публично раскрывается в сборке.

Конечно, если исполняемый файл был un-obfuscated .NET .exe, то, предположительно, вы могли бы использовать что-то вроде Reflector, чтобы разобрать код и скопировать его в свою программу (не рекомендуется), НО вам нужно будет проверить законность этого, если вы не являетесь владельцем исполняемого файла.