为什么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";"。这应该可以防止我的问题,但它没有,我不知道为什么。如果你们中有人知道原因,请告诉我。

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

为什么Process.Start没有';不能在asp.net web服务上工作吗

我认为您唯一的问题是:

proc.WaitForExit(1000);

它指示程序等待一秒钟,等待进程完成。在你的机器上,这个过程完成得很好。不过,在另一台机器上,可能需要更长的时间。尝试更改为:

proc.WaitForExit();

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

您可能还想重定向进程的输出,以查看编程是否正在挂起或等待来自您的其他东西(或者,在本例中,是您的代码(。

此外,该进程可能遇到错误并将消息写入StandardError而不是StandardOutput。试着设置pInfo.RedirectStandardError = true;并阅读它,看看是否有您遗漏的内容。

问题出在EULA对话框上,该对话框弹出,但由于ProcessStartInfo设置而不可见。当我在同样用于此web服务的应用程序池的帐户下通过CMD运行PsList.exe时,我会收到EULA协议的提示,之后一切都很好。

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

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

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