如何在Web App中使用Process时修复DirectoryNotFoundException

时间:2016-05-30 12:17:24

标签: c# asp.net

我在ASP.NET Web应用程序中使用Pdf2Text。 Web界面允许上载PDF文件并将其转换为文本。要转换为文本,我使用下面的C#函数,它依赖于通过Process库运行Pdf2Text程序。

void ExtractOCR(string input, string output)
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.CreateNoWindow = true;
    startInfo.UseShellExecute = true;
    startInfo.FileName = Server.MapPath("ocr/Pdf2Text.exe");
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    startInfo.Arguments = input + " " + output;

    Process exeProcess;
    using (exeProcess = Process.Start(startInfo))
    {
        exeProcess.WaitForExit();
    }
}

我已经仔细检查过输入和输出路径是否都有效。但是,当我运行Web应用程序时,我收到以下错误。

An unhandled exception ('System.IO.DirectoryNotFoundException') occurred in Pdf2Text.exe

我尝试过Just-In-Time调试器,但由于某些原因它甚至都不会运行。 Pdf2Text是一个预编译文件,我没有它的源代码。我相信 this 是该文件的下载网站,但不是100%肯定。我已经在网上查了解类似错误的解决方案,但没有一个有效。

1 个答案:

答案 0 :(得分:0)

感谢@GraDea建议查看池的权限进入Web应用程序目录,这是解决方案。

Web应用程序位于自定义位置(而不是inetpub\wwwroot的默认ASP服务器目录)。在建议之后,我尝试将池用户添加到Web应用程序的自定义位置,但这似乎不起作用。接下来,我将Web应用程序移动到inetpub\wwwroot位置并将池用户添加到该文件夹​​,通过IIS重新启动该站点,现在一切都恢复正常。

为了将来对任何人的引用,对类似问题的最简单修复是确保您的Web应用程序位于默认的IIS服务器目录中,并且您的站点池的用户名已添加到应用程序文件夹的security permissions。我没有尝试修复自定义位置,因为它对我来说不是那么重要,但我猜它很可能还涉及添加必要的IIS默认池用户(例如IIS_IUSRS)和站点池的用户。