一、批處理方式
1、在c :\window\system32目錄下新建一個(gè)iispoolrestar.vbs文件,內(nèi)容如下:
set WebAppPool = GetObject("IIS://LocalHost/w3svc/AppPools/應(yīng)用程序池名")
WebAppPool.Stop
WebAppPool.Start
然后:新建一個(gè)bat處理文件。如:iispoolrestart.bat,內(nèi)容如下:
cscript c:\windows\system32\iispoolrestar.vbs
2、
c:\windows\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"ASP.NET v4.0"
c:\windows\system32\inetsrv\AppCmd.exe start apppool /apppool.name:"ASP.NET v4.0"
先Stop再Start就行。
但是以前有過在IIS管理器里面停止應(yīng)用程序池,然后馬上啟動(dòng),這時(shí)可能因?yàn)閼?yīng)用程序池還有些操作沒完全完成而報(bào)錯(cuò)。所以我很害怕批處理里第二個(gè)啟動(dòng)應(yīng)用程序池的命令也會(huì)有報(bào)錯(cuò)的可能性。所以為了安全起見我希望能先Sleep 1分鐘再Start一下。但是批處理里沒有Sleep命令,所以就用下面的方法模擬了一下。
c:\windows\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"ASP.NET v4.0"
c:\windows\system32\inetsrv\AppCmd.exe start apppool /apppool.name:"ASP.NET v4.0"
ping -n 60 -w 1000 192.168.255.255
c:\windows\system32\inetsrv\AppCmd.exe start apppool /apppool.name:"ASP.NET v4.0"
二、程序處理
string AppPoolName="thylx"; //應(yīng)用程序池命名,當(dāng)找不到該應(yīng)用程序池時(shí),系統(tǒng)會(huì)報(bào)找不到指定路徑
string method="Start"; //啟動(dòng)命令, 停止:“Stop” ; 回收:“Recycle”
try
{
DirectoryEntry appPool = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
DirectoryEntry findPool = appPool.Children.Find(AppPoolName,"IIsApplicationPool");
findPool.Invoke(method,null);
appPool.CommitChanges();
appPool.Close();
Response.Write("啟動(dòng)成功!");
}
catch(Exception ex)
{
Response.Write(string.format("發(fā)生異常:{0}",ex.ToString()));
}
三、
System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcesses();
foreach (Process pi in p)
if (pi.ProcessName == appname)
{
tag=true;
pi.Kill();
}
Process p = new Process();
p.StartInfo.FileName = "cscript.exe";
p.StartInfo.Arguments = "c:\\windows\\system32\\iisapp.vbs /a "+appoolname+" /r";
p.StartInfo.CreateNoWindow = false;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
return p.StandardOutput.ReadToEnd();