J'ai une tâche MSBuild qui exécute (entre autres) un appel à xcopy. Ce que j'ai trouvé est que cet appel à xcopy s'exécute correctement lorsque j'exécute ma tâche MSBuild à partir d'un fichier de commandes, et ne parvient pas à exécuter ou produire une sortie qui me donnerait une idée de ce qui se passe Application C# avec un System.Diagnostics.Process.Que fait exactement System.Diagnostics.Process UseShellExecute?
Les deux processus sont lancés avec plus ou moins la même structure:
waitProc.StartInfo.Arguments = "/C [executable]";
waitProc.StartInfo.FileName = "cmd.exe";
waitProc.StartInfo.UseShellExecute = false;
De plus en changeant le « UseShellExecute » de false à true sur la commande xcopy je peux en faire réussir dans les deux cas d'utilisation, mais la commande ne fonctionne pas dans un troisième cas d'utilisation. Le troisième cas d'utilisation est notre système de construction automatisé qui est un service Windows appelant directement msbuild. En cas d'échec sur notre machine de build, la commande de copie se bloque indéfiniment, ce qui est, je crois, parce que System.Diagnostics.Process essaie d'afficher une fenêtre, et les services n'ont pas de session de bureau Windows associée, donc ils ne peuvent pas afficher les fenêtres.
J'ai essayé d'utiliser la propriété "CreateNoWindow", et j'ai essayé de définir "WindowStyle" sur "ProcessWindowStyle.Hidden", mais cela ne change pas le comportement sur la machine de construction. Tout cela dit, ce que je veux vraiment savoir, c'est ce que fait exactement la propriété UseShellExecute, car elle semble faire beaucoup plus que ce que suggère la documentation MSDN.
Merci.
Salut Chris, avez-vous déjà été plus loin avec ça? Je semble rencontrer une situation similaire: http://stackoverflow.com/questions/7085185/msbuild-buildinparallel-custom-task-spawning-process-that-fails-to-run –