我在服务器上有一个WCF服务,当我从客户端应用程序发送请求时,该服务将运行一个与网络节点通信的进程,这个过程对我的服务至关重要,如果它没有运行整个服务都没用。问题是这个过程永远不会运行:( 我已经阅读了大约两天的解决方案,但他们都没有帮助我,我已经授予服务管理员权限并检查.exe文件路径是否正确这里是我的代码,任何帮助都会受到欢迎。
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
答案 0 :(得分:1)
首先:
检查myprocess.Start()
方法调用的返回值。如果该流程已成功启动,则会返回true
。记录返回值。
第二:(你可能已经这样做了)
流程开始后,您必须等待调用才能运行并完成流程。
第三
您如何确定该流程尚未开始?您是否可以在任务管理器中检查该过程?该过程可能正在启动和失败。您的流程是否创建了任何日志?你检查了事件日志吗?
第四:
您的流程是否有任何UI组件?请注意,作为服务运行时(在Windows Vista和更高版本中),该服务无法显示UI。它会挂起。
第五:
您是否可以使用与服务相同的用户ID手动运行流程?您可以使用RunAs
或PsExec
在相应的用户ID下运行您的流程。
第六:
您也可以重定向标准错误并从中读取以查看您的进程是否已写入任何异常
如,
process.StartInfo.RedirectStandardError = true;
string errResult = process.StandardError.ReadToEnd();
您可以记录结果并进行检查。
第七:
您还应该记录流程的退出代码
process.WaitForExit();
var exitCode = process.ExitCode;