2017-07-27 93 views
1

我在服务器上有一个WCF服务,当我从客户端应用程序发送一个请求时,该服务将运行一个进程与网络节点通信,这个过程对我来说至关重要服务,如果它不运行整个服务是没用的。问题是这个过程永远不会运行:( 我一直在阅读大约两天的解决方案,但他们都没有帮助我,我给了服务管理员权限,并检查.exe文件路径是否正确这里是我的代码任何帮助将可以欣赏IIS托管的WCF服务无法启动进程

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); 
     } 

这里是日志

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 

回答

1

第一:。

检查myprocess.Start()方法调用的返回值如果进程已成功启动,它会返回true。记录返回值。

Process.Start()

二:(您可能已经这样做了)

的处理开始时,你应该有一个等待呼吁进程运行,完整。

Process.WaitForExit()

三:

如何确定这个过程还没有开始?你能够检查任务管理器中的进程吗?该过程可能开始和失败。有没有由你的过程创建的日志?你检查过事件日志吗?

四:

请问您的过程中遇到任何UI组件?请注意,作为服务运行时(在Windows Vista及更高版本中),该服务无法显示UI。它会挂起。

第五:

您能够使用相同的用户ID为您服务手动运行的过程?您可以使用RunAsPsExec在适当的用户标识下运行您的过程。

第六:

您可以重定向标准错误,以及并从中读取,看看你的过程是否已经写任何异常

例如,

process.StartInfo.RedirectStandardError = true; 

string errResult = process.StandardError.ReadToEnd(); 

您可以登录的结果,核实。

第七:

你也应该记录下你的过程

 process.WaitForExit(); 

     var exitCode = process.ExitCode; 
+0

亲爱Subbu的退出代码,实际上你的第六建议帮我找出这个问题我已经添加myprocess.StartInfo的原因.RedirectStandardOutput = true;并根据返回的值我发现有一个缺少配置文件,我的过程开始!非常感谢 – Amir