1

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.

  1. Est-ce un problème connu?

  2. Quel pourrait être le problème?

  3. Des suggestions sur le débogage?

  4. Comment puis-je le contourner?

(J'utilise la version 1.4.4 CCNet SP1)

Répondre

1

Lorsque CCNet est en cours d'exécution en tant que service, il ne va pas avoir accès à l'écran, donc ne vous attendez pas à voir quoi que ce soit sur la écran dans cette configuration. La première chose que je vérifie est les autorisations - assurez-vous que le service s'exécute comme un compte qui a des autorisations pour accéder à toutes les ressources dont vous avez besoin. Vous avez également des fichiers journaux CCNet, que vous pouvez trouver via Dashboard. Sur une note de côté, essayez TeamCity au lieu de CCNet, ses 10 ans d'avance.

+0

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

+1

@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

+0

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

0

Peut-être que cette réponse va aider: delphi windows service can't download file from internet

Vous devez savoir que lors de l'exécution CCNet comme une application (DOSBox) il utilise les variables d'environnement et tous les droits du compte connecté. Il peut donc se connecter à un serveur, utiliser des mots de passe mis en cache, obtenir des variables de registre pour ce compte. MAIS lorsqu'il est exécuté en tant que service, le compte est celui que vous avez fourni: LocalSystem for exampe, où env. Varibales ne sont pas les mêmes. Donc, ce que vous pouvez faire est de changer le compte de service CCNet pour le test. Changez-le à votre compte d'utilisateur (avec mot de passe), et je suis sûr que cela fonctionnera mieux!

+0

Le compte sous lequel le service est un compte d'administrateur et il a les privilèges, mais cela n'aide pas. – Poulo

Questions connexes