2010-12-21 94 views
1

如果我從我的命令提示符運行它,它工作正常。試圖運行psexec遠程服務器和回收應用程序池

PSEXEC \服務器的Cscript.exe iisapp.vbs/A AppName的/ R

我試着用C#控制檯應用程序,同樣的事情。我正在使用下面的代碼,但大多數情況下應用程序掛起並且沒有完成,並且幾次它會拋出錯誤代碼。我做錯了嗎?任何人都知道我可以在哪裏查找錯誤或錯誤代碼?

static void RecycleAppPool(string sServer) 
     { 
      Console.Clear(); 
      ProcessStartInfo p = new ProcessStartInfo("psexec.exe", "\\\\" + sServer + " cscript.exe iisapp.vbs /a <AppName> /r"); 
      p.RedirectStandardInput = true; 
      p.UseShellExecute = false; 
      Process.Start(p); 
     } 

當有出錯完成,看起來像這樣

「的Cscript.exe,錯誤代碼退出-2147024664」

編輯

這個工作......

static void RecycleAppPool(string sServer) 
{ 
      Console.Clear(); 
      ProcessStartInfo p = new ProcessStartInfo("psexec.exe"); 
      p.Arguments = @"\\" + sServer + @" cscript.exe iisapp.vbs /a AppName /r"; 
      p.UseShellExecute = false; 
      Process.Start(p); 
} 
+0

如果我註釋掉RedirectStandardInput和UseShellExecute,它似乎可以正常工作,但會爲該過程啓動一個單獨的窗口。我希望將所有內容保存在一個窗口(控制檯)中,如果可能的話 – James 2010-12-21 22:56:15

回答

0

VS2003/8/10:工具 - >錯誤查找。以十六進制粘貼錯誤代碼。 800700E8。這是「管道正在關閉」。不是很有幫助 - 我猜想有一些重定向問題。

您是否真的擁有ProcessStartInfo參數,還是用於替換實際的應用程序名稱?

+0

它取代了應用程序名稱 – James 2010-12-21 22:52:02

0

您是否嘗試過使用appcmd而不是iisapp.vbs來回收?

並且,在此thread中,他們使用WMI回收了遠程應用程序池。

0

如果這是IIS7那麼你可以從C#Web管理命名空間:

using System; 
using System.Xml.Serialization; 
using Microsoft.Web.Administration; 
using System.Linq; 
using System.Runtime.InteropServices; 

///... 

var serverManager = ServerManager.OpenRemote(@"\\myiisserver"); 
var appPool = serverManager.ApplicationPools["my app pool name"]; 
appPool.Recycle(); 

您可以瞭解更多有關Web Admin Namespace here。到目前爲止,它對我們來說工作得非常好。但必須安裝在客戶端和遠程機器上。

相關問題