我有一个Web API应用程序,需要运行一个Python脚本,然后运行一个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命令。从Console应用程序运行此代码时,一切正常。该程序自动获取Perforce设置(我已经获得了指定了所有设置的P4V客户端)。但是当从ASP.NET Web API运行时,它没有得到settigns并说它无法连接到perforce:1666服务器(我猜这是没有指定settign时的标准值)。
我知道没有那么多人使用Perforce,特别是以这种方式并且可以在这里提供帮助,但是想知道从Console应用程序和Web API应用程序运行这个脚本导致这种不同行为之间有什么区别。
答案 0 :(得分:1)
从控制台应用程序运行代码和在IIS * 中运行代码之间最明显的区别之一是,通常,这两段代码将在不同的用户帐户。
通常情况下,如果您遇到代码在其中一种情况下而非另一种情况下工作的问题,那么它就是权限或每用户设置问题。您可以通过在为相应的IIS应用程序池配置的同一用户帐户下运行控制台应用程序来验证是否是这种情况,或者反之,将应用程序池配置为使用您自己的用户帐户,然后查看是否存在问题仍然存在。
如果您确认它是权限问题和/或每用户设置,那么您需要决定如何修复它。我通常建议不要在您自己的用户帐户下运行IIS应用程序池 - 如果您似乎无法为现有应用程序池用户配置正确的设置,我通常建议您创建一个单独的用户帐户(在本地在计算机上或作为域的一部分,具体取决于所需的内容),并仅为其提供完成工作所需的权限/设置。
* IIS Express在这里是个例外,因为它没有应用程序池,代码最终会在您自己的用户帐户下运行。