Как запустить консольное приложение и предотвратить его закрытие в конце? - PullRequest
2 голосов
/ 12 января 2012

Я запускаю скрипт оболочки (.cmd) из моего приложения .NET. Мне бы хотелось, чтобы окно консоли оставалось открытым после завершения сценария, чтобы я мог проверять наличие ошибок. Я пытаюсь с cmd.exe /K:my.cmd, но по какой-то причине это не работает (скрипт не выполняется). Даже простая команда "dir" не работает. Любые другие идеи?

Для демонстрации это:

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
{
    Arguments = "/K:dir",
    ErrorDialog = true,
    FileName = "cmd.exe",
    WorkingDirectory = @"C:\"
});

Дает мне это:

C:\>

Добавлено уточнение: Мое приложение (запускающее скрипт) - это приложение windows form . Выполнение приведенного выше кода открывает новое окно консоли (как и должно быть). Я хочу, чтобы новое окно консоли оставалось открытым. Также я не могу изменить скрипт. Это автоматический сценарий сборки, и он ДОЛЖЕН завершаться.

Ответы [ 4 ]

2 голосов
/ 12 января 2012

Я не знаю, в этом ли вся проблема, но если вы запускаете cmd /K:dir, ничего не запускается. Использование пробела вместо двоеточия заставляет меня работать.

т. Е. cmd /K dir


Стоит также отметить, что вы можете проверить эти команды в диалоге запуска. В любой последней версии Windows это можно сделать, удерживая Win и нажав R .

1 голос
/ 12 января 2012

Удалить двоеточие из вашего примера:

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
{
  Arguments = "/K dir",
  ErrorDialog = true,
  FileName = "cmd.exe",
  WorkingDirectory = @"C:\"
});
1 голос
/ 12 января 2012

Вы можете поместить свои команды в пакетный файл (.bat) и сделать последнюю команду в пакетном файле «паузой» (без кавычек). Затем вместо выполнения cmd вместо этого выполните командный файл.

Образец командного файла - test.bat

реж пауза

Вы также можете вывести результаты в текстовый файл, а затем показать текстовый файл в вашем приложении.

DIR >results.txt
0 голосов
/ 12 января 2012

Я бы регистрировал ошибки в файле, а не оставлял окно открытым.чтобы оставить окно консоли .net открытым, добавьте

Console.ReadLine();

в конец, для этого пользователю потребуется нажать Enter, чтобы продолжить.Вы также можете использовать Console.ReadKey(), чтобы использовать любую клавишу

, если вы хотите, чтобы окна процессов были открыты, команда pause

...