2014-11-04 17 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快遞是個例外,因爲在這裏它不會做應用程序池和代碼沒有結束自己的用戶帳戶下運行。

相關問題