一、批处理方式
1、在c :\window\system32目录下新建一个iispoolrestar.vbs文件,内容如下:
set WebAppPool = GetObject("IIS://LocalHost/w3svc/AppPools/应用程序池名")
WebAppPool.Stop
WebAppPool.Start
然后:新建一个bat处理文件。如:iispoolrestart.bat,内容如下:
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管理器里面停止应用程序池,然后马上启动,这时可能因为应用程序池还有些操作没完全完成而报错。所以我很害怕批处理里第二个启动应用程序池的命令也会有报错的可能性。所以为了安全起见我希望能先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"; //应用程序池命名,当找不到该应用程序池时,系统会报找不到指定路径
string method="Start"; //启动命令, 停止:“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("启动成功!");
}
catch(Exception ex)
{
Response.Write(string.format("发生异常:{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();