Échec de la compilation uniquement lorsque je l’exécute en tant que service distant à l’aide de PsExec

J’essaie d’exécuter des tests de compilation sur une série de machines de génération, j’ai donc écrit un script pour dissortingbuer les tâches sur chaque machine. J’utilise PsExec de Microsoft qui installe un service sur les machines de construction à partir desquelles il exécute les commandes. Sur chaque machine de génération, j’ai un fichier de commandes qui appelle un script python qui exécute tous les tests voulus. Le script original passera quel test à exécuter, ainsi que la journalisation des informations afin que je puisse stocker les résultats et en garder la trace plus tard.

Le script d’origine peut appeler toutes les machines et exécuter le fichier de commandes correctement. Si je lance le fichier de commandes localement sur chaque machine, il appelle correctement le script python qui comstack tout correctement. Mais quand je lance le fichier de commandes à distance à partir du script d’origine, j’obtiens l’erreur de compilation suivante

fatal error C1902: Program database manager mismatch; please check your installation 

encore et encore. J’utilise Microsoft Visual Studio 12 sur chaque machine et python 2.7. Est-ce que quelqu’un sait pourquoi cette erreur se produirait seulement parce que le script appelant le fichier bat qui appelle le script python? Toute aide ou pousser dans la bonne direction serait grandement appréciée! Merci!

J’ai rencontré une telle erreur sur VS2010 sauf que j’utilise le ssh de Cygwin.

Le problème est que le compilateur mspdbsrv.exe exécute mspdbsrv.exe tant que serveur central au lieu de traiter lui-même les informations de débogage. Lorsque vous exécutez le compilateur à partir de la session interactive, tout fonctionne cl.exe , mais lorsque cl.exe est exécuté depuis une session distante quelconque, il ne parvient pas à se connecter à mspdbsrv.exe et échoue finalement avec une erreur C1902.

Il semble que malgré le fait que Cygwin ssh exécute bash (shell) à partir de .\Administrator , quelque part dans l’API RPC, le compte à partir duquel le service est exécuté est utilisé ( .\cyg_server dans mon cas). Voici la capture d’écran de API Monitor tracing cl.exe :

J’ai réussi à résoudre ce problème en changeant l’utilisateur du service sshd pour .\Administrator . Vous pouvez probablement faire le tour avec PsExec.

Citer la partie pertinente de MSDN

Erreur fatale C1902

Msgstr “” “Par exemple, vous avez peut-être copié les fichiers pour pouvoir appeler le compilateur ou l’outil de liaison à partir de l’invite de commande sans définir la variable d’environnement PATH en conséquence.”

Assurez-vous donc que la variable d’environnement PATH est la même pour les deux cas, local et distant .

erreur fatale C1902: incompatibilité du gestionnaire de la firebase database du programme; s’il vous plaît vérifier votre installation

De MSDN et développez l’erreur irrécupérable C1902 :

Un fichier de firebase database de programme (.pdb) a été créé à l’aide d’une version plus récente de mspdbXX.dll que celle du compilateur sur votre système. Cette erreur indique généralement que mspdbsrv.exe ou mspdbcore.dll sont manquants ou ont des versions différentes de mspdbXX.dll. (L’espace réservé XX dans le nom de fichier mspdbXX.dll change à chaque version du produit. Par exemple, dans Visual Studio 2005, le nom du fichier est mspdb80.dll.)

Assurez-vous que les versions correspondantes de mspdbsrv.exe, mspdbcore.dll et mspdbXX.dll sont installées sur votre système. Assurez-vous que les versions incompatibles n’ont pas été copiées dans le répertoire contenant le compilateur et les outils de liaison pour votre plate-forme cible. Par exemple, vous avez peut-être copié les fichiers pour pouvoir appeler l’outil de compilation ou de liaison à partir de l’invite de commande sans définir la variable d’environnement PATH en conséquence.