2017-07-27 1 views
1

J'ai un service WCF sur un serveur, lorsque j'envoie une requête à partir d'une application cliente, le service exécute un processus de communication avec les nœuds réseau, ce processus est critique dans mon service et s'il ne fonctionne pas tout le service est inutile. le problème est ce processus ne fonctionne jamais :( J'ai lu des solutions pendant environ deux jours, mais aucun d'entre eux m'a aidé, j'ai donné les privilèges d'administrateur de service et de vérifier si le chemin du fichier .exe est correct voici mon code toute aide APPRÉCIÉLe service WCF hébergé par IIS n'est pas en mesure de démarrer un processus

try 
     { 
      myprocess.StartInfo.UseShellExecute = false; 
      myprocess.StartInfo.CreateNoWindow = true; 
      myprocess.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 
      myprocess.StartInfo.RedirectStandardOutput = true; 
      myprocess.StartInfo.FileName = myprocessPathAndName; 
      myprocess.StartInfo.WorkingDirectory = 
      Path.GetDirectoryName(myprocessPathAndName); 
      myprocess.StartInfo.Arguments = ConfigName; 
      myprocess.Start(); 
      Log("myprocess Runnig " , sw); 
      Log(myprocessPathAndName, sw); 
      Log(myprocess.StartInfo.WorkingDirectory, sw); 
     } 
     catch (Exception e) 
     { 
      Log("Failed to run myprocess : " + e.Message, sw); 
     } 

ici est le journal

7/26/2017 4:05:15 AM : myprocessRunnig 
7/26/2017 4:05:15 AM : C:\inetpub\wwwroot\Station\COM\Dn\myprocess.exe 
7/26/2017 4:05:15 AM : C:\inetpub\wwwroot\Station\COM\Dn 

Répondre

1

Première:.

Vérifiez la valeur de retour de votre Si le processus a commencé avec succès, il retournerait appel de méthode myprocess.Start().. Enregistrez la valeur de retour.

Process.Start()

Deuxièmement: (vous pouvez faire déjà)

Une fois le processus lancé, vous devriez avoir un appel d'attente pour l'exécution du processus et complet.

Process.WaitForExit()

Troisième:

Comment déterminez-vous que le processus n'a pas commencé? Êtes-vous capable de vérifier le processus dans le Gestionnaire des tâches? Il est possible que le processus démarre et échoue. Y a-t-il un journal créé par votre processus? Avez-vous vérifié le journal des événements?

Quatrième:

Votre processus a l'un des composants de l'interface utilisateur? Notez que lors de l'exécution en tant que service (dans Windows Vista et versions ultérieures), le service ne peut pas afficher une interface utilisateur. Ça pendait.

Cinquième:

Êtes-vous en mesure d'exécuter manuellement votre processus avec le même ID utilisateur que votre service? Vous pouvez utiliser RunAs ou PsExec pour exécuter votre processus sous l'ID utilisateur approprié.

Sixième:

Vous pouvez rediriger l'erreur aussi bien et lire pour voir si votre processus a écrit une exception

par exemple,

process.StartInfo.RedirectStandardError = true; 

string errResult = process.StandardError.ReadToEnd(); 

Vous pouvez connecter le résultat et vérifie ça.

Septième:

Vous devez également enregistrer le code de sortie de votre processus

 process.WaitForExit(); 

     var exitCode = process.ExitCode; 
+0

Cher Subbu, en fait votre suggestion sixième me aider à comprendre la cause de ce problème, j'ai ajouté myprocess.StartInfo .RedirectStandardOutput = true; et basé sur la valeur retournée, j'ai trouvé qu'il y avait un fichier de configuration manquant pour mon processus pour commencer! Merci beaucoup – Amir