2014-11-04 113 views
0

我有一个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应用程序之间的区别造成这种不同的行为。

+2

什么用户帐户是在下运行的应用程序池?您是否尝试在* that *帐户下运行控制台应用程序而不是您自己的(或尝试配置应用程序池在您的帐户下运行)? – 2014-11-04 08:58:27

+0

哦,是的,你是对的!当我将我的帐户用于应用程序池时,它工作正常。我真的很想念这种可能性,谢谢。现在的问题是以某种方式为应用程序池帐户指定这些Perforce变量,但我认为它不属于.NET :)。你可能创造一个答案,我可以接受它吗? – MyUserName 2014-11-04 09:31:27

+1

您能否将Perforce变量传递给脚本,而不是试图从用户的环境中读取它们? – 2014-11-04 18:50:24

回答

1

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

通常情况下,如果遇到代码在其中一种情况下工作而不是其他问题时出现问题,则表示是权限问题或每用户设置问题。您可以通过在为相应的IIS应用程序池配置的相同用户帐户下运行控制台应用程序或反之,配置应用程序池以使用您自己的用户帐户,然后查看问题是否出现这种情况仍然存在。

如果您确认它是一个权限问题和/或每个用户设置,那么您需要决定如何解决它。我通常建议不要在您自己的用户帐户下运行IIS应用程序池 - 如果您似乎无法获得为现有应用程序池用户配置的正确设置,我通常会建议创建一个单独的用户帐户(本地在机器上或作为你的域的一部分,取决于需要什么),并给它只需要做这项工作的权限/设置。


* IIS快递是个例外,因为在这里它不会做应用程序池和代码没有结束自己的用户帐户下运行。

相关问题