2009-12-03 2 views
0

J'ai un programme de ligne de commande qui s'exécute de manière interactive depuis la fenêtre DOS. Lorsque j'essaie d'exécuter la même commande et les mêmes arguments depuis une application asp.net, cela échoue. L'application Web a le script & Autorisations d'exécution. À des fins de test, j'ai donné des autorisations de contrôle total au groupe Tout le monde pour le dossier entier de l'application Web et pour le dossier contenant le fichier .exe (réside dans les fichiers programme). L'application web utilise la sécurité intégrée de Windows (pas d'anonyme) donc elle devrait utiliser mes informations d'identification et je suis un administrateur. En cours d'exécution dans Windows XP.Erreur lors de l'exécution d'une ligne de commande .exe à partir d'ASP.net

Le code ci-dessous exécute la commande. Le nom de fichier et les arguments ont l'air bien. Cependant, le p.ExitCode = 1 au lieu de 0. Comment résoudre les problèmes et savoir pourquoi le processus échoue? J'ai regardé le processus dans le débogueur et je vois des exceptions 'System.InvalidOperationException' mais cela ne me dit pas grand-chose. Pourquoi InvalidOperationException?

Process p = new Process(); 
      p.StartInfo.FileName = filename; 
      p.StartInfo.Arguments = arguments; 
      p.StartInfo.CreateNoWindow = true; 
      p.StartInfo.UseShellExecute = true;   
      p.StartInfo.RedirectStandardOutput = false; 
      p.StartInfo.RedirectStandardError = false; 
      p.Start(); 
      p.WaitForExit(); 
      if (0 != p.ExitCode) 
      { 
       ApplicationException ex = 
        new ApplicationException(string.Format("\"{0} {1}\" returned ({2})", filename, arguments, p.ExitCode)); 
       throw ex; 
     } 

Répondre

0

Il y a une variété de choses une application peut faire ce qui causerait des problèmes lors couru par une autre application malheureusement, sans plus d'information, il y a tout simplement trop d'options. Vous devrez probablement rediriger la sortie standard et/ou l'erreur standard pour savoir ce qui ne va pas (ou si le programme de ligne de commande est .NET, vous aurez probablement des erreurs dans votre journal des événements de Windows).

Pour un test simple que vous pourriez faire quelque chose d'aussi simple que:

p.StartInfo.RedirectStandardError = true; 
p.Start(); 
p.WaitForExit(); 
string err = p.StandardError.ReadToEnd(); 

Notez que vous aurez besoin d'une solution filetée plus compliquée pour une véritable construction, comme l'application de la console écrit trop de données à la norme erreur, il va remplir le tampon et se bloquer. Je peux vous aider avec une solution plus robuste pour la sortie de la console si vous en avez besoin, mais cela vous donnera probablement vos informations de débogage.

+0

Le fichier .exe ne renvoie aucun résultat après son exécution. Quand il fonctionne avec succès, il revient à l'invite DOS. –

+0

Je pensais que peut-être en cas d'erreur, l'application de la console pourrait effectivement donner une sortie (comme une exception non gérée bouillonnant jusqu'à l'invite de commande). Sans une idée de ce qu'il fait qui est invalide, c'est trop difficile à dire. Une possibilité probable est qu'elle essaie de faire quelque chose qui nécessite une fenêtre (par exemple en attendant l'entrée de l'utilisateur, ou en demandant plus obscurément une poignée de fenêtre). En fonction de l'application, votre appel en cas d'échec peut vous donner des indices sur la raison pour laquelle ... – fyjham

0

L'application Web utilise Windows sécurité intégrée (pas anonyme) si il doit utiliser mes lettres de créance et je suis un admin

Non, ce n'est pas correct. Le processus de travail s'exécute toujours sous les paramètres par défaut ASPNET pour Windows XP, sauf si vous activez l'emprunt d'identité ASP.NET.

Questions connexes