【发布时间】:2018-07-12 06:38:43
【问题描述】:
我需要以编程方式从经典 ASP 页面回收 IIS 应用程序池。 我怎样才能做到这一点?
我可以通过 VBS 进行,但不能通过 ASP 页面。
到目前为止,我已经尝试过这段代码,它没有返回错误,但什么也没做:
<%
Set objWShell = Server.CreateObject("WScript.Shell")
Set objCmd = objWShell.Exec("%systemroot%\SysWow64\cmd.exe /c %systemroot%\system32\inetsrv\appcmd.exe recycle apppool /apppool.name:MyAppPoolNameHere")
Set objCmd = nothing
Set objWShell = nothing
%>
我也尝试过以下代码(在 VBS 中有效,但在 ASP 页面中无效):
<%
Set locator = Server.CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.connectserver("MyServerName", "root/MicrosoftIISv2")
Set APCollection = Service.InstancesOf("IISApplicationPool")
Response.write APCollection.count
For Each APInstance In APCollection
Response.Write "<br>" & APInstance.Name
APInstance.Recycle
Next
%>
非常感谢您的帮助 ;-)
【问题讨论】:
-
您需要在具有提升权限的帐户的上下文中运行 ASP 页面。
-
@Lankymart,是的,这就是我所理解的。我不喜欢这个解决方案,但它是唯一的一个。例如,使用“LocalService”身份运行应用程序池可以使我的 ASP 页面正常工作。考虑到安全隐患,这太糟糕了,也不理想。
-
在过去,您会创建一个 VB6 ActiveX DLL 来包含高权限代码并在 COM 下运行它,并将其注册为具有更高权限的 run-as 用户身份。这样您就可以避免为所有 ASP 页面提供提升的权限。
-
绝对正确.. 但是这些美好的过去已经结束了,因为我把我的 VB6 CD 留在了架子上 :-( 所以,使用“LocalService”身份可以使我最初的问题的代码正常工作,但奇怪的是,即使在 VBScript 中,某些方法和属性也不适用于应用程序池,例如 .getState 和属性 .AutoStart 等......只有 .Recycle、.Start 和 .Stop 方法似乎有效。文档是否损坏?msdn.microsoft.com/fr-fr/library/ms690608
标签: iis asp-classic iis-8 application-pool