【问题标题】:Executing C++ .exe From IIS in asp.net using ProcessStartInfo使用 ProcessStartInfo 在 asp.net 中从 IIS 执行 C++ .exe
【发布时间】:2015-10-10 19:41:52
【问题描述】:

我正在用 C# 从 Web 服务执行简单的 C++ (.exe)。它在开发环境(在 Visual Studio 中)中运行良好,但是当我托管在 IIS 中时,它不会被执行。我尝试使用简单的 C# 控制台应用程序,它对我来说很好。 我已经授予权限

  1. 大家
  2. IUSR
  3. 本地服务
  4. 网络服务
  5. 网络
  6. IIS_Users

从 IIS 到编辑权限。

[WebMethod]
    public string GETOCR()
    { 
        string OCROutput ="";
        ProcessStartInfo startinfo = new ProcessStartInfo("C:\\BSG\\ProcessOCR.exe", "12,13;964,15;964,634;9,634 \"C:\\BSG\\20150709_224156.jpg\" ");
        startinfo.CreateNoWindow = true;
        startinfo.UseShellExecute = false;
        startinfo.RedirectStandardOutput = true;
        startinfo.WindowStyle = ProcessWindowStyle.Normal;
        try
        {
            using (Process exeProcess = Process.Start(startinfo))
            {
                OCROutput = exeProcess.StandardOutput.ReadToEnd();
                //Response.Write(OCROutput);



                exeProcess.WaitForExit();
            }

        }
        catch (Exception)
        {

            throw;
        }

        return OCROutput;
    }

【问题讨论】:

  • 您期望看到它执行吗?情况并非如此,它将在 IIS 正在使用的用户帐户下运行,因此将与您和您的桌面隔离。如果进程启动失败会引发异常,是这样吗? exe是否出现在所有用户任务列表中?
  • 你怎么知道它没有被执行?您在展示的 C# 代码中是否遇到了一些异常?什么例外?

标签: c# asp.net web-services iis


【解决方案1】:

您需要检查您站点的应用程序池的帐户。为此,请在 IIS 中单击您的站点(适用于 IIS 7 及更高版本),然后单击右侧 Actions 面板中的 Basic Settings。您将看到应用程序池名称,记住它并单击取消。之后转到应用程序池,找到您记得的应用程序池并选择它。点击右侧Edit Application Pool面板中的Advanced Settings...。在 Process Model 部分中查找 Identity。身份值是您需要在 Security 选项卡中为文件 C:\BSG\ProcessOCR.exe 设置权限的帐户(不适用于站点文件夹!)和该程序将向/从其中写入/读取文件的文件夹(如果有)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2013-08-26
    • 2012-11-19
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    相关资源
    最近更新 更多