簡體   English   中英

ASP.Net服務器上的進程無法通過IIS正確運行

[英]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流程?

在IIS 7中配置.NET信任級別

<system.web>
  <securityPolicy>
    <trustLevel name="Full" policyFile="internal"/>
  </securityPolicy>
</system.web>

ASP.NET信任級別和策略文件

很可能在正在掃描的內容( uploads文件夾)上沒有正確配置權限,或者工作進程用戶沒有使用Sophos所需的完整權限。 您知道可執行文件本身可由工作進程訪問,因為您將獲得特定於Sophos的退出代碼和錯誤消息。

由於您的進程將刪除被視為威脅的文件,因此您需要授予用戶對存儲上載文件的文件夾運行進程modifyfull control權限。

默認情況下,您可以將IIS_IUSRS組用於ApplicationPoolIdentity進程,但您可以在IIS管理器>應用程序池>高級中驗證(和修改)用戶。

這個答案有更多細節

以下是一些想法:

  1. 使用具有提升的文件夾權限的其他用戶創建進程,請參閱start-a-net-process-as-a-different-user
  2. 如果先前的建議失敗,請使用第1點中使用的憑據在服務器上登錄一次。它將配置連接到用戶配置文件的注冊表項,某些程序需要它。
  3. 開發在服務器上運行的簡單.net服務並監控上傳文件夾。 該服務更有可能成功運行Sophos掃描。 以下是使用.net創建服務的參考。
  4. 該服務還可以使用DB /文件系統/等與您的網頁通信。因此操作可能看起來是同步的。

這些是我的4美分:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM