为什么Process.Start没有';不能在asp.net web服务上工作吗
本文关键字:web net asp 服务 工作 不能 Start Process 没有 为什么 | 更新日期: 2023-09-27 18:01:01
为什么此代码在我的开发计算机(win7 32位(和作为控制台应用程序的目标服务器(2008r2 64位(上完美运行。但是,当我尝试将它作为web服务在目标服务器上运行时,它什么也不做。没有错误,什么都没有。
如果我删除
exitMsg = proc.StandardOutput.ReadToEnd();
然后它失败并出现错误:
System.InvalidOperationException:进程必须在请求之前退出可以确定信息。
[WebMethod]
public string GetRunningProcesses()
{
ProcessStartInfo pInfo = new ProcessStartInfo();
pInfo.FileName = @"E:'bin'PsList.exe";
pInfo.WindowStyle = ProcessWindowStyle.Hidden;
pInfo.CreateNoWindow = true;
pInfo.UseShellExecute = false;
pInfo.RedirectStandardOutput = true;
string exitMsg = "";
int exitCode = 1;
using (Process proc = Process.Start(pInfo))
{
exitMsg = proc.StandardOutput.ReadToEnd();
proc.WaitForExit(1000);
exitCode = proc.ExitCode;
}
return exitMsg;
}
我认为代码运行的用户一定有一些东西。作为web服务,此代码在asp.net用户下运行,这可能会导致问题。
请告诉我如何解决这个问题。非常感谢。
已解决
问题出在EULA对话框上,该对话框弹出,但由于ProcessStartInfo设置而不可见。当我在同样用于此web服务的应用程序池的帐户下通过CMD运行PsList.exe时,我会收到EULA协议的提示,之后一切都很好。
奇怪的是,我的真实代码中有"pInfo.Arguments="/acceptula";"。这应该可以防止我的问题,但它没有,我不知道为什么。如果你们中有人知道原因,请告诉我。
非常感谢你的帮助。你们真是这里的好人。
我认为您唯一的问题是:
proc.WaitForExit(1000);
它指示程序等待一秒钟,等待进程完成。在你的机器上,这个过程完成得很好。不过,在另一台机器上,可能需要更长的时间。尝试更改为:
proc.WaitForExit();
这将无限期地等待程序退出。
您可能还想重定向进程的输出,以查看编程是否正在挂起或等待来自您的其他东西(或者,在本例中,是您的代码(。
此外,该进程可能遇到错误并将消息写入StandardError
而不是StandardOutput
。试着设置pInfo.RedirectStandardError = true;
并阅读它,看看是否有您遗漏的内容。
问题出在EULA对话框上,该对话框弹出,但由于ProcessStartInfo设置而不可见。当我在同样用于此web服务的应用程序池的帐户下通过CMD运行PsList.exe时,我会收到EULA协议的提示,之后一切都很好。
奇怪的是,我的真实代码中有"pInfo.Arguments="/acceptula";"。这应该可以防止我的问题,但它没有,我不知道为什么。如果你们中有人知道原因,请告诉我。
非常感谢你的帮助。你们真是这里的好人。
尝试将业务逻辑封装在Try/catch块中,该块捕获任何异常并将其写入输出或日志文件。