J'ai un projet qui est en cours de construction en utilisant CruiseControl.NET. Le projet contient une 'tâche MSBuild' qui exécute la construction du projet et également les tests unitaires. Le test unitaire à son tour est juste une tâche 'exec' de MSBuild qui exécute un exécutable.CruiseControl.NET s'exécute en tant que service Windows et en tant que processus autonome se comporte différemment
Le test unitaire implique un certain remoting .NET. Et lorsque les tests unitaires sont exécutés via l'invite de commande du système, la fenêtre du logiciel s'ouvre, les tests sont exécutés et le processus se ferme.
Lorsque je force une génération via le tableau de bord Web, la génération se bloque au point où le test de l'unité commence à s'exécuter. La fenêtre du logiciel ne s'ouvre pas, mais l'exécutable est en cours d'exécution. Si le processus est détruit via l'explorateur de tâches, la génération passe à l'état "Échec". Cela se produit lorsque j'exécute ccnet en tant que service Windows. Si j'exécute CCNet directement (pas en tant que service Windows) et forcer une génération via le tableau de bord Web, les tests de génération et d'unité se déroulent comme prévu. (avec la fenêtre du logiciel s'ouvrant.)
Il semble qu'il y ait un interblocage dans le cas où CCNet est exécuté en tant que service Windows. Je suppose qu'il est lié aux flux de sortie/erreur standard.
Est-ce un problème connu?
Quel pourrait être le problème?
Des suggestions sur le débogage?
Comment puis-je le contourner?
(J'utilise la version 1.4.4 CCNet SP1)
Le compte sous lequel le service est un compte d'administrateur et il a les privilèges, mais cela n'aide pas. Je n'ai pas compris 'accès à l'écran'. CCNet lance une application.Cela affiche la fenêtre de l'application lorsque CCNet est exécuté en tant qu'application simple et n'apparaît pas lorsque CCNet est exécuté en tant que service. Pouvez-vous expliquer comment l'accès à l'affichage entre en vigueur lorsque CCNet lance l'application? Et il n'y a aucune erreur/exception dans les fichiers journaux qui se plaignent des autorisations refusées. – Poulo
@Poulo, dans Windows, pour des raisons de sécurité, les services n'ont pas accès à ce qui est affiché sur l'écran. Ainsi, lorsque ccnet est lancé en tant que service lance votre application, il ne montrera pas la fenêtre de commande ni ne créera de fenêtres/contrôles, etc. Sinon, le processus fonctionne comme d'habitude, donc il ne devrait pas y avoir de problème. La seule chose que je peux conseiller est d'utiliser un enregistreur (par exemple, log4net) et d'ajouter une journalisation étendue à vos tests pour comprendre ce qui se passe. Sinon, essayez Team City (je pense que c'est gratuit pour les petits projets). – Grzenio
Merci. Pouvez-vous me donner des lectures utiles à ce sujet? (Les services de lancement d'applications ne créeront pas de fenêtres/contrôles) Je veux comprendre comment cela affecte les appels à distance .NET effectués dans l'application. Si je peux trouver quelque chose de concret, alors je peux changer mon application de test unitaire pour contourner le problème ou ne pas utiliser le remoting .NET. Ça fait un moment que j'ai commencé à utiliser CCNet et j'ai 7 projets en eux, alors essayer Team City comme vous l'avez suggéré serait le dernier sur ma liste. – Poulo