[英]Difference between starting process from Console applciation and ASP.NET application
我有一個Web API應用程序,該應用程序需要運行Python腳本,而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命令。 從控制台應用程序運行此代碼時,一切正常。 該程序會自動獲取Perforce設置(我有一個P4V客戶端,其中包含所有指定的設置)。 但是,當從ASP.NET Web API運行時,它沒有獲得settigns,並說它不能與perforce:1666服務器連接(我猜這是未指定settign時的標准值)。
我確實了解到,沒有多少人使用Perforce,尤其是以這種方式使用Perforce,並且可以在此處提供幫助,但是我想知道從控制台應用程序和Web API應用程序運行此腳本可能會導致這種不同行為的區別是什么。
從控制台應用程序運行的代碼與IIS *中的運行代碼之間最明顯的區別之一是,通常,這兩段代碼將在不同的用戶帳戶下運行。
通常,如果您遇到的問題是代碼在其中一種情況下而不在其他情況下可以工作,則這是權限問題或按用戶設置的問題。 您可以通過在為適當的IIS應用程序池配置的同一用戶帳戶下運行控制台應用程序來驗證是否是這種情況,反之亦然,將應用程序池配置為使用您自己的用戶帳戶,然后查看是否存在問題仍然存在。
如果您確認這是權限問題和/或每個用戶的設置,則需要確定修復方法。 我通常建議不要以您自己的用戶帳戶運行IIS應用程序池-如果您似乎無法獲得為現有應用程序池用戶配置的正確設置,則通常建議創建一個單獨的用戶帳戶(在計算機本地或作為您網域的一部分,具體取決於所需內容),並僅向其提供完成該工作所需的權限/設置。
* IIS Express是這里的例外,因為它不執行應用程序池,並且代碼確實以您自己的用戶帳戶運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.