2009-10-11 11 views
0

Je veux que ma page ASP.NET exécute et exécute des commandes git. Je mets les commandes dans un fichier de chauve-souris qui fonctionne:Comment puis-je supprimer une page ASP.NET et exécuter une commande git?

REM cd to the git repo folder 
cd c:\temp\mygitrepo 
"c:\Program Files\Git\Bin\git.exe" show c090dc4b8b1b3512c1b5363c371e21d810d02f54 -- myfile.txt 

Si je lance mon fichier .bat à partir d'une invite de commandes, pas de problème. Si je l'exécute en utilisant System.Diagnostics.Process.Start, j'obtiens cette erreur:
RUNTIME_PREFIX demandé, mais le calcul du préfixe a échoué. En utilisant fallback

statique L'erreur provient de ce fichier git: http://github.com/git/git/blob/master/exec_cmd.c

J'utilise exactement la même technique pour exécuter des commandes svn.exe, pas de problème.

EDIT 1: A partir du thread here J'ai appris que msysgit installe certains fichiers dans un emplacement associé à l'utilisateur actuel, moi, au lieu de tous les utilisateurs. Le serveur Web IIS s'exécute sous un autre compte d'utilisateur. J'ai essayé de copier certains des fichiers git qui ont attiré mon attention, comme .gitconfig, à d'autres utilisateurs (dans Documents and Settings). Pas de chance. Donc, je me suis focalisé sur IIS pour me faire passer quand il lance la commande git.

Répondre

3

Est-ce réellement une erreur, ou est-ce que cela vous avertit simplement d'un repli? Basé sur le code lié, il semble que la commande devrait toujours s'exécuter avec succès, en utilisant seulement le PREFIX statique plutôt que le RUNTIME_PREFIX.

Si la commande échoue effectivement, vous pouvez vous assurer que toutes les variables d'environnement requises sont disponibles lors du démarrage du processus à partir de .NET. Vous pouvez également avoir besoin d'emprunter l'identité d'une autre fenêtre pour exécuter la commande avec les autorisations appropriées (je suppose que l'identité ASP.NET est restreinte autant que possible.) L'objet ProcessStartInfo fournit plusieurs façons de configurer le processus, y compris les fenêtres l'identité, le verbe du processus et les variables d'environnement. Assurez-vous de fournir le contexte approprié dont votre fichier batch a besoin avant de l'exécuter.

+0

Mentalement, j'ai rapidement rejeté votre "Est-ce réellement une erreur ... la commande devrait encore s'exécuter avec succès". Mais c'était la clé. Ma logique a capturé stdout et stderr. Si stderr n'était pas vide, ma logique supposait que la commande échouait et affichait uniquement stderr. Comme vous le pensiez, stdout contenait la sortie attendue malgré l'erreur. –

+0

Parfois, il suffit d'un peu de réflexion hors de la boîte. ;) Content de son travail. – jrista

Questions connexes