У меня есть задача MSBuild, которая выполняет (помимо прочего) вызов xcopy. Я обнаружил, что этот вызов xcopy выполняется правильно, когда я запускаю задачу MSBuild из командного файла и не могу выполнить или произвести какой-либо вывод, который позволил бы мне понять, что происходит, когда тот же командный файл вызывается из другого С# с System.Diagnostics.Process.
Оба процесса запускаются с более или менее одинаковой структурой:
waitProc.StartInfo.Arguments = "/C [executable]";
waitProc.StartInfo.FileName = "cmd.exe";
waitProc.StartInfo.UseShellExecute = false;
Кроме того, изменив значение "UseShellExecute" с false на true в команде xcopy, я могу сделать это успешным в обоих случаях использования, однако команда не запускается в третьем варианте использования. Третий вариант использования - наша автоматическая система сборки, которая является службой Windows, вызывающей msbuild напрямую. В случае сбоя на нашей машине для сборки команда копирования зависает бесконечно, что, я считаю, связано с тем, что System.Diagnostics.Process пытается отобразить окно, а службы не имеют сеанса рабочего стола Windows, связанного с ними, поэтому они не могут окна отображения.
Я попытался использовать свойство "CreateNoWindow", и я попытался установить "WindowStyle" в "ProcessWindowStyle.Hidden", но это не меняет поведение на машине сборки.
Все это говорит о том, что я действительно хочу знать о том, что именно имеет свойство UseShellExecute, потому что это, кажется, намного больше, чем предлагает документация MSDN.
Спасибо.