0

我有一个需要运行 Python 脚本的 Web API 应用程序,该脚本又运行一个 Perl 脚本:) 做了一些其他的事情并从中获取输出结果。我这样做的方法是启动一个进程:

        var start = new ProcessStartInfo()
        {
            FileName = _pythonPath,                                 //@"C:\Python27\python.exe",
            Arguments = arguments,                                  //@"D:\apps\scripts\Process.py
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true
        };

        using (Process process = Process.Start(start))
        {
            using (StreamReader reader = process.StandardOutput)
            {
                var result = reader.ReadToEnd();
                var err = process.StandardError.ReadToEnd();                
                process.WaitForExit();

                return result;
            }
        }

里面的脚本尝试使用 P4 Python API 连接到 Perforce 服务器,然后 Perl 脚本也调用 P4 命令。从控制台应用程序运行此代码时,一切正常。该程序会自动获取 Perforce 设置(我有一个 P4V 客户端并指定了所有设置)。但是当从 ASP.NET Web API 运行时,它没有得到 settigns 并说它无法连接到 perforce:1666 服务器(我猜这是没有指定 settign 时的标准值)。

我确实知道没有多少人使用 Perforce,尤其是以这种方式并且可以在这里提供帮助,但我想知道从控制台应用程序和 Web API 应用程序运行此脚本之间有什么区别会导致这种不同的行为。

4

1 回答 1

1

从控制台应用程序运行代码与在 IIS *中运行代码之间最明显的区别之一是,通常,这两段代码将在不同的用户帐户下运行。

通常,如果您遇到代码在其中一种情况下而不是另一种情况下工作的问题,这是权限或每个用户设置的问题。您可以通过在为相应 IIS 应用程序池配置的同一用户帐户下运行控制台应用程序来验证是否是这种情况,反之亦然,将应用程序池配置为使用您自己的用户帐户,然后查看问题是否存在持续存在。

如果您已确认这是权限问题和/或每个用户的设置,那么您需要决定如何修复它。我通常建议不要在您自己的用户帐户下运行 IIS 应用程序池 - 如果您似乎无法为现有应用程序池用户配置正确的设置,我通常建议创建一个单独的用户帐户(在机器上本地或作为您域的一部分,具体取决于所需的内容)并仅为其提供完成工作所需的权限/设置。


* IIS Express 在这里是个例外,因为它不执行应用程序池,并且代码最终会在您自己的用户帐户下运行。

于 2014-11-25T07:55:09.823 回答