В настоящее время я работаю над системой автоматической установки.Основа того, как это работает, состоит в том, что вещи, которые нужно установить, упакованы вместе с cmd-файлом, который управляет установкой.Если это msi или exe, то cmd-файл сообщит установщику, какие ответы ему нужны, если это sql-скрипт, он запустит его под sqlcmd и т. Д.следующий код C #:
ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo(filePath + fileToRun);
p.WorkingDirectory = filePath;
Process proc = new System.Diagnostics.Process();
proc.StartInfo = p;
proc.Start();
proc.WaitForExit();
И это хорошо работает.Он делает то, что должен.
Однако проблема, с которой я столкнулся, заключается в том, что, поскольку это автоматизировано, а некоторые компоненты зависят от существования предыдущих компонентов, очень важно, чтобы система точно знала, что установленоданная среда, а что нет.Поэтому, если по какой-то причине происходит сбой cmd-файла, мой код C # должен знать об этом.
Я не могу понять, как это сделать.Кажется, что System.Diagnostics.Process изолирует то, что он выполняет, и не имеет представления о том, что происходит внутри процесса, который он выполняет.Ошибка, указывающая на сбой, может быть вызвана многими источниками - это может быть файл cmd, сценарий sql, установщик или powershell.
Так есть ли способ заставить мой код распознавать, когда в процессе произошла ошибка, и записать ее?Я могу изменить файлы cmd, которые запускают код, и попытаться обнаружить ошибки там, но я не могу редактировать файлы, которые пытается запустить cmd.И даже если я могу выделить ошибки в файле cmd, как мне сообщить о них обратно в C #?
Cheers, Matt