[英]Process on ASP.Net server not running correctly over IIS
我試圖在ASP.Net Web應用程序中的上傳文件上運行防病毒掃描。 我們正在使用Sophos,因此可以訪問他們的命令行API sav32cli
。 在我使用的代碼中:
Process proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files (x86)\Sophos\Sophos Anti-Virus\sav32cli.exe";
proc.StartInfo.Arguments = @"-remove -nc " + SavedFile;
proc.StartInfo.Verb = "runas";
proc.Start();
proc.WaitForExit();
int exitCode = proc.ExitCode;
當單步執行代碼時,當連接到開發服務器上的w3wp
進程時,代碼只是從一行跳到另一行似乎什么都不做。 從dev服務器上的代碼運行時,它會執行預期的掃描文件並刪除它是否被視為病毒。
服務器正在運行IIS 8.0,以及.Net Framework 4中內置的應用程序。我已根據這些說明更改了機器配置以允許進程作為SYSTEM帳戶運行。 https://support.microsoft.com/en-us/kb/317012#%2Fen-us%2Fkb%2F317012
<processModel userName="SYSTEM" password="AutoGenerate" />
有什么我想念的嗎? 這種實施的最佳實踐是什么?
編輯 :當調用時, Process
返回一個ExitCode
為2(錯誤停止執行),而不是預期的0(掃描工作,沒有病毒),或3(掃描工作,發現病毒)。
編輯2 :根據下面的評論,我將代碼更改為:
Process proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files (x86)\Sophos\Sophos Anti-Virus\sav32cli.exe";
proc.StartInfo.Arguments = @"-remove -nc " + SavedFile;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
StringBuilder output = new StringBuilder();
while (!proc.StandardOutput.EndOfStream)
{
string line = proc.StandardOutput.ReadLine();
output.AppendLine(line);
}
proc.WaitForExit();
int exitCode = proc.ExitCode;
ASPxMemo2.Text = exitCode.ToString() + Environment.NewLine + output.ToString();
通過IIS運行時output
始終為空,但從代碼運行時正確填充。
編輯3:與其看着StandardOutput
我們看StandardError
,它揭示了這個錯誤:
初始化檢測引擎時出錯[0xa0040200](可能用戶管理員權限不足。)
暫時我們將采用另一種病毒檢查方法,但如果有人擁有它,我們仍然想知道一種可能的解決方案。
您需要確保在IIS中運行.NET應用程序的應用程序池對您的文件具有執行權限
“C:\\ Program Files(x86)\\ Sophos \\ Sophos Anti-Virus \\ sav32cli.exe”
您可能還需要將此權限添加到要上載文件的文件夾位置(例如c:\\ temp)
您可能還需要具有管理員權限才能運行防病毒掃描,因為IIS8不以管理員身份運行。 在調試時,visual studio使用當前登錄的windows用戶(除非你使用runas),這樣就解釋了為什么它在調試時會起作用。
您是否嘗試過提升信任度來運行Web流程?
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal"/>
</securityPolicy>
</system.web>
很可能在正在掃描的內容( uploads
文件夾)上沒有正確配置權限,或者工作進程用戶沒有使用Sophos所需的完整權限。 您知道可執行文件本身可由工作進程訪問,因為您將獲得特定於Sophos的退出代碼和錯誤消息。
由於您的進程將刪除被視為威脅的文件,因此您需要授予用戶對存儲上載文件的文件夾運行進程modify
或full control
權限。
默認情況下,您可以將IIS_IUSRS
組用於ApplicationPoolIdentity
進程,但您可以在IIS管理器>應用程序池>高級中驗證(和修改)用戶。
以下是一些想法:
這些是我的4美分:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.