2012-05-15 4 views
1

Я хотел бы связать 'n' количество исполняемых файлов, при этом вывод 'n-1'th exe передается как вход' n'th exe. Я планирую использовать XML-файл для настройки исполняемой позиции, пути, i/p, o/p и т. Д.Выполнение консольных приложений в последовательном порядке

Мой вопрос в том, как связать 'n-1' с 'n', когда есть несколько выходов и несколько входов (параметры командной строки). У меня есть некоторые идеи об этом, но хотелось бы посмотреть, что думают другие, может быть, я узнаю об эффективном/быстром способе сделать это. Конструкторский шаблон для гибких конфигураций xml поможет.

структура XML псевдо, что я использовал бы

<executables> 
    <entity position="1" exePath="c:\something1.exe"> 
    <op><name="a" value=""></op> 
    </entity> 
    <entity position="2" exePath="c:\something2.exe"> 
    <ip><name="a"></ip> 
    <op><name="b" value=""></op> 
    </entity> 
    <entity position="3" exePath="c:\something3.exe"> 
    <ip><name="b"</ip> 
    </entity> 
</executables> 

Я бы иметь знания о I/P и O/P, прежде чем настроить их. Контекст: я мог бы или не мог бы включать определенные узлы в некоторые типы цепочек, которые я буду использовать, эффективно создавая гибкий последовательный путь выполнения EXE.

+0

Что относительно существующей команды трубы? [Использование операторов перенаправления команд] (https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true), хотя выше для XP это работает через Windows, насколько мне известно, и большинство вкусов * nix [Intro to Unix: Pipes and Filters] (http://www.december.com/unix/tutor/pipesfilters.html) ... –

+1

Или что-то более интересное ... вы уже знаете о [Windows Workflow Foundation] (http://msdn.microsoft.com/en-us/netframework/aa663328.aspx)? –

+0

Хотите сохранить его на уровне консоли, не хотите входить в MSMQ любой другой IPC. – edocetirwi

ответ

1

Для этого вы можете использовать класс System.Diagnostics.Process. Следующий код должен сделать трюк для двух исполняемых файлов:

using (Process outerProc = new Process()) 
{ 
    outerProc.StartInfo.FileName = "something1.exe"; 
    outerProc.StartInfo.UseShellExecute = false; 
    outerProc.StartInfo.RedirectStandardOutput = true; 
    outerProc.Start(); 

    string str = outerProc.StandardOutput.ReadToEnd(); 

    using(Process innerProc = new Process()) 
    { 
     innerProc.StartInfo.FileName = "something2.exe"; 
     innerProc.StartInfo.UseShellExecute = false; 
     innerProc.StartInfo.RedirectStandardInput = true; 
     innerProc.Start(); 

     innerProc.StandardInput.Write(str); 
     innerProc.WaitForExit(); 
    } 

    outerProc.WaitForExit(); 
} 

Вы можете легко изменить его в соответствии с «N-1» в «п» случай.

+0

Это будет цикл на узлах сущности внутри исполняемого узла. Извините, что вы не вставляете код C# в вопрос. На самом деле речь идет о передаче i/p и o/p между процессами. – edocetirwi

+0

Хмм, я думал, что вы говорите о стандартах и ​​стандарте, но вы можете установить аргументы процесса через свой [Свойство ProcessStartInfo.Arguments] (http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo .arguments.aspx). Что касается «выходных параметров», я не знаю, что вы подразумеваете под этим ... –

Смежные вопросы