为什么Process.Start不能使用asp.net Web服务?

时间:2011-06-30 19:39:59

标签: c# asp.net web-services ipc external-application

为什么此代码在我的开发计算机(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设置而导致其无法访问。 当我通过CMD在帐户下运行PsList.exe时,该帐户也用于此Web服务的应用程序池,我会收到EULA协议的提示,并且在此之后工作正常。

奇怪的是我有“pInfo.Arguments =”/ accepteula“;”在我的真实代码中。这应该可以防止我的探测,但它没有,我不知道为什么。 如果有人知道原因,请告诉我。

非常感谢您的帮助。你是这里的好人。

3 个答案:

答案 0 :(得分:1)

我认为你唯一的问题是:

proc.WaitForExit(1000);

指示程​​序等待一秒钟以完成该过程。在您的机器上,该过程完成。但是,在另一台机器上,可能需要更长时间。尝试更改为:

proc.WaitForExit();

将无限期地等待程序退出。

您可能还想重定向Process的输出,以查看编程是否挂起或等待您的其他内容(或者,在本例中为您的代码)。

此外,该过程可能会遇到错误并将消息写入StandardError而不是StandardOutput。尝试设置pInfo.RedirectStandardError = true;并阅读它,看看是否有任何遗漏。

答案 1 :(得分:1)

问题出在EULA对话框上,该对话框已加速,但由于ProcessStartInfo设置而导致其无法访问。 当我通过CMD在帐户下运行PsList.exe时,该帐户也用于此Web服务的应用程序池,我会收到EULA协议的提示,并且在此之后工作正常。

奇怪的是我有“pInfo.Arguments =”/ accepteula“;”在我的真实代码中。这应该可以防止我的探测,但它没有,我不知道为什么。 如果有人知道原因,请告诉我。

非常感谢您的帮助。你是这里的好人。

答案 2 :(得分:0)

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