Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Process.Start不';无法从asp.net web服务工作?_C#_Asp.net_Web Services_Ipc_External Application - Fatal编程技术网

C# 为什么Process.Start不';无法从asp.net web服务工作?

C# 为什么Process.Start不';无法从asp.net web服务工作?,c#,asp.net,web-services,ipc,external-application,C#,Asp.net,Web Services,Ipc,External Application,为什么这段代码作为控制台应用程序在我的开发计算机(win7 32位)和目标服务器(2008r2 64位)上完美运行。但是,当我尝试在目标服务器上作为web服务运行它时,它什么也不做。没有错误,什么都没有 如果我删除 exitMsg = proc.StandardOutput.ReadToEnd(); 然后它失败并出现错误: System.InvalidOperationException: 进程必须在请求之前退出 信息是可以确定的 我认为一定有一些关于用户的东西,代码在其中运行。作为web服务

为什么这段代码作为控制台应用程序在我的开发计算机(win7 32位)和目标服务器(2008r2 64位)上完美运行。但是,当我尝试在目标服务器上作为web服务运行它时,它什么也不做。没有错误,什么都没有

如果我删除

exitMsg = proc.StandardOutput.ReadToEnd();
然后它失败并出现错误:

System.InvalidOperationException: 进程必须在请求之前退出 信息是可以确定的

我认为一定有一些关于用户的东西,代码在其中运行。作为web服务,此代码在asp.net用户下运行,这可能会导致问题

请告诉我如何解决这个问题。多谢各位

已解决



问题在于弹出的EULA对话框,但由于ProcessStartInfo设置,该对话框不可见。 当我在这个web服务的应用程序池中使用的帐户下通过CMD运行PsList.exe时,系统会提示我需要一个EULA协议,然后一切正常

奇怪的是,我的真实代码中有“pInfo.Arguments=“/accepteula”;”。这应该可以预防我的问题,但没有,我也不知道为什么。 如果你们当中有人知道原因,请告诉我


非常感谢你的帮助。你们是这里真正的好人。

我想你们唯一的问题是:

proc.WaitForExit(1000);
它指示程序等待一秒钟,等待进程完成。在您的机器上,该过程完成得很好。不过,在另一台机器上,这可能需要更长的时间。尝试更改为:

proc.WaitForExit();
它将无限期地等待程序退出

您可能还希望重定向进程的输出,以查看编程是否挂起或等待您的其他信息(或者,在本例中,您的代码)


此外,该过程可能会遇到错误并将消息写入
StandardError
,而不是
StandardOutput
。尝试设置
pInfo.RedirectStandardError=true并读取该代码,以查看是否缺少任何内容。

尝试将业务逻辑包装在一个Try/catch块中,该块捕获任何异常并将其写入输出或日志文件。

问题在于EULA对话框弹出,但由于ProcessStartInfo设置,该对话框不可见。 当我在这个web服务的应用程序池中使用的帐户下通过CMD运行PsList.exe时,系统会提示我需要一个EULA协议,然后一切正常

奇怪的是,我的真实代码中有“pInfo.Arguments=“/accepteula”;”。这应该可以预防我的问题,但没有,我也不知道为什么。 如果你们当中有人知道原因,请告诉我


非常感谢你的帮助。这里的人真的很好。

正如你提到的,权限很可能是问题所在。您能否模拟具有更高权限的用户?仅根据错误消息,您是否在执行
ReadToEnd
之前尝试过执行
WaitForExit
?另外,删除timeout参数,因为现在如果花费的时间超过1秒,就会出现异常。如果这是您想要的,请捕获并处理异常。@George我如何才能模拟用户?web.config?@Primoz-Yes中的一些设置,还请注意,多个调用的这种原因会很快导致线程池耗尽。如果这是一个'once every now and then'类型的call-prob ok,但是要注意-我会尝试一个异步方法。@Primoz-您是否尝试过在该行之前使用或不使用该语句?我的意思是不用它就可以尝试。我是这样尝试的:使用(Process proc=Process.Start(pInfo)){proc.WaitForExit();exitCode=proc.exitCode;}@Primoz-我刚刚更新了我的答案。这个过程也可能是将某些内容写入StandardError,然后挂起(而不是完成)。你也应该检查一下,像这样?exitsg=proc.StandardError.ReadToEnd();进程WaitForExit();exitCode=proc.exitCode;它还是什么也没做。@Primoz-这给你带来了什么,或者只是让它再次挂起来?
proc.WaitForExit();