Tengo una tarea de MSBuild que ejecuta (entre otras cosas) una llamada a xcopy. Lo que he encontrado es que esta llamada a xcopy se ejecuta correctamente cuando ejecuto mi tarea MSBuild desde un archivo por lotes, y no se puede ejecutar o producir ningún resultado que me permita tener una idea de lo que sucede cuando se llama ese mismo archivo por lotes desde otro Aplicación C# con System.Diagnostics.Process.¿Qué hace exactamente System.Diagnostics.Process UseShellExecute?
Ambos procesos se ponen en marcha con más o menos la misma estructura:
waitProc.StartInfo.Arguments = "/C [executable]";
waitProc.StartInfo.FileName = "cmd.exe";
waitProc.StartInfo.UseShellExecute = false;
Además, cambiando la "UseShellExecute" de falso a verdadero en el comando xcopy que puede hacer que este tenga éxito en ambos casos de uso, sin embargo, la comando no se ejecuta en un tercer caso de uso. El tercer caso de uso es nuestro sistema de compilación automatizado, que es un servicio de Windows que llama directamente a msbuild. En el caso de una falla en nuestra máquina de compilación, el comando de copia se bloquea indefinidamente, lo cual es, creo, porque System.Diagnostics.Process intenta mostrar una ventana y los servicios no tienen una sesión de escritorio de Windows asociada a ellos, por lo que no pueden mostrar ventanas
He intentado utilizar la propiedad "CreateNoWindow" y he intentado configurar el "WindowStyle" en "ProcessWindowStyle.Hidden", pero eso no cambia el comportamiento en la máquina de compilación.
Dicho todo esto, lo que realmente quiero saber es qué hace exactamente la propiedad UseShellExecute, porque parece hacer mucho más de lo que sugiere la documentación de MSDN.
Gracias.
Hola Chris, ¿alguna vez has ido más lejos con esto? Parece que me encuentro con una situación similar: http://stackoverflow.com/questions/7085185/msbuild-buildinparallel-custom-task-spawning-process-that-fails-to-run –