【问题标题】:Starting process only works in console application启动过程仅适用于控制台应用程序
【发布时间】:2013-01-26 14:27:02
【问题描述】:

我正在尝试从 Web 应用程序(在 Visual Studio 开发服务器上运行)启动外部 exe。当我从控制台应用程序运行下面的代码时,它工作正常,但是当我从网页运行它时,应用程序崩溃了。我认为这一定是权限问题,但尝试了一些方法并无法使其正常工作。

      private void RunExe(string pythonOutputFileNameAndLocation)
      {

            var process = new Process { StartInfo = GetProcessStartInfo(pythonOutputFileNameAndLocation) };            

            // This is where the application crashes   
            process.Start();

            // ...do some more things here
       }


       private ProcessStartInfo GetProcessStartInfo(string pythonOutputFileNameAndLocation)
            {
                var startInfo = new ProcessStartInfo
                {
                    CreateNoWindow = true, 
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    RedirectStandardInput = true,
                    FileName = _exeFileLocation,
                    WindowStyle = ProcessWindowStyle.Hidden,
                    Arguments = String.Format("--hideUI --runScript {0}", pythonOutputFileNameAndLocation)                
                };

                return startInfo;
            }

我要问的是为什么这段代码可以在控制台应用程序中运行,而不是在 Visual Studio Web 服务器中运行?

我使用的是 Windows 7 和 Visual Studio 2010。

编辑:

这里要求的是 Windows 捕获的问题详细信息:

问题事件名称:BEX 应用名称: 应用程序版本:2.2.2.2909 申请时间戳:507bf285 故障模块名称:MSVCR100.dll 故障模块版本:10.0.40219.325 故障模块时间戳:4df2be1e 异常偏移量:0008af3e 异常代码:c0000417 异常数据:00000000 操作系统版本:6.1.7601.2.1.0.256.48 区域设置 ID:2057 附加信息 1:c5a0 附加信息 2:c5a0d9e876212c0d3929ba8445f002dc 附加信息 3:5e93 附加信息 4:5e93e44f8aa24f99d37e055f533d1658

我无法调试外部应用程序,因为我没有其中的代码。我也没有堆栈跟踪,因为我没有遇到异常。外部进程正在崩溃。

谢谢

【问题讨论】:

  • 崩溃的堆栈和异常是什么?你能附加一个调试器并添加更多细节吗?
  • 我怀疑他可能遇到了安全问题。堆栈跟踪会很有帮助。
  • 使用无效参数调用 C 运行时函数时会引发异常代码 0xc0000417。这几乎总是发出调用的代码中的错误。由松懈的错误检查引起的情况并不罕见。显然,如果没有源代码,您将无法调试它,您需要应用程序的作者或供应商的帮助。

标签: c# process permissions


【解决方案1】:

Ronnie,您可能遇到了 UAC 和安全访问问题。尝试禁用 UAC 并重试。此外,考虑在真正的 Web 服务器上,此过程将以 ASP.NET 或 Web 用户权限启动。出于安全原因,这些帐户受到限制。这意味着您尝试启动的应用程序可能会失败,因为它无法访问所需的文件。因此,不建议从 Web 服务器启动外部 exe。但是,您可以查看有关使用管理员凭据运行应用程序的这个 stackoverflow 问题。 How to run c# application with admin creds?

【讨论】:

    【解决方案2】:

    可能是权限方面的安全问题,但最好能提供更多有关异常的详细信息。

    您是否尝试过在 IIS 上运行它并检查它是如何工作的?

    【讨论】:

      【解决方案3】:

      异常代码c0000417 具有符号名称STATUS_INVALID_CRUNTIME_PARAMETER。谷歌搜索“python”和“STATUS_INVALID_CRUNTIME_PARAMETER”会导致围绕目录权限的各种 python 问题。您可以使用Process Monitor 来发现在尝试运行您的应用程序时是否存在任何权限问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-23
        • 2014-01-24
        • 2017-05-21
        • 2018-04-12
        • 1970-01-01
        • 1970-01-01
        • 2014-12-20
        • 2010-10-30
        相关资源
        最近更新 更多