我有一个Web API应用程序需要运行一个Python脚本,该脚本又运行一个Perl脚本:)执行一些操作,并从中获取输出结果。 我做的方式是启动一个进程:从控制台应用程序启动进程和ASP.NET应用程序之间的区别
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,特别是以这种方式,并可以在这里帮助,但想知道什么是从控制台应用程序运行此脚本和Web API应用程序之间的区别造成这种不同的行为。
什么用户帐户是在下运行的应用程序池?您是否尝试在* that *帐户下运行控制台应用程序而不是您自己的(或尝试配置应用程序池在您的帐户下运行)? – 2014-11-04 08:58:27
哦,是的,你是对的!当我将我的帐户用于应用程序池时,它工作正常。我真的很想念这种可能性,谢谢。现在的问题是以某种方式为应用程序池帐户指定这些Perforce变量,但我认为它不属于.NET :)。你可能创造一个答案,我可以接受它吗? – MyUserName 2014-11-04 09:31:27
您能否将Perforce变量传递给脚本,而不是试图从用户的环境中读取它们? – 2014-11-04 18:50:24