У меня есть задача MSBuild, которая выполняет (среди прочего) вызов xcopy. Я обнаружил, что этот вызов xcopy выполняется правильно, когда я запускаю задачу MSBuild из пакетного файла, и не может выполнить или выдать какой-либо вывод, который позволил бы мне понять, что происходит, когда этот же пакетный файл вызывается из другого Приложение C # с 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.
Спасибо.