2009-05-25 2 views
2

У меня есть следующий код, который запускает файл bat. файл bat затем запускает некоторый .exe .. который делает некоторые вещи. Материал занимает 5-10 секунд.Любой способ сохранить внешнее окно команды в процессе Process.Start (..)?

ProcessStartInfo start = new ProcessStartInfo 
{ 
    Arguments = "\"" + newTargetFile + "\"" + 
       " " + 
       "\"" + originalFile.FullName + "\"", 
    FileName = filename, 
    WindowStyle = ProcessWindowStyle.Normal, 
    CreateNoWindow = false, 
    UseShellExecute = false 
}; 

// Run the external process & wait for it to finish 
using (Process proc = Process.Start(start)) 
{ 
    proc.WaitForExit(); 
} 

То, что я пытаюсь сделать, - оставить окно команды открытым, даже после завершения процесса. Есть какой-либо способ сделать это?

В противном случае, могу ли я получить все выходные данные этого окна, идущие к моему отладчику, поэтому мне не нужно беспокоиться об этом оставшемся окне?

ура.

ответ

1

Если вы запускаете интерпретатор cmd с аргументом/k и передаете имя файла партии в качестве следующего аргумента, вы должны получить то, что вам нужно. Аргумент/k указывает, что Windows оставит интерпретатор cmd открытым, когда это будет сделано с тем, что вы скажете ему, чтобы сделать это в качестве следующего аргумента.

Вы также можете использовать свойство RedirectStandardOutput, но я думаю, что это было бы сложнее в конце.

+1

приветствий. Я также добавил «pause» в конец .bat-файла :), который также сделал трюк: P –

0

Попробуйте что-нибудь подобное с/к аргументу, чтобы открыть терминал:

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 

    string path = System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName; 
    if (Environment.OSVersion.Version.Major >= 6) 
    { 
     path = System.IO.Directory.GetParent(path).ToString(); 
    } 

    proc.StartInfo.WorkingDirectory = path; 
    proc.StartInfo.FileName = "cmd.exe"; 
    proc.StartInfo.Arguments = "/k git --version"; 
    proc.Start();