【问题标题】:How to recycle an IIS Application pool from a classic ASP page?如何从经典 ASP 页面中回收 IIS 应用程序池?
【发布时间】: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


【解决方案1】:

很久以前就遇到过同样的问题,最后写了编辑web.config文件的代码,从而导致应用程序池的自动回收。

要使其正常工作,您需要通过 web.config 文件为 IUSR 帐户授予完全权限,我认为默认情况下不会授予这些权限。

代码如下:(很多debug,可以去掉所有的Response.Write行)

<% Option Explicit %>
<% Response.Buffer = True %>
<%
Const FILE_PATH="C:\Inetpub\wwwroot\Web.config"
Dim objFSo, objFile, strData
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Response.Write("File: " & FILE_PATH & ", Exist? " & objFSO.FileExists(FILE_PATH) & "<br />")
Response.Flush()
Set objFile = objFSO.OpenTextFile(FILE_PATH)
strData = objFile.ReadAll
objFile.Close
Response.Write("Got " & Len(strData) & " bytes of data<br />")
Response.Flush()
Set objFile = objFSO.CreateTextFile(FILE_PATH)
objFile.Write(strData)
objFile.Close
Response.Write("Success")
Response.Flush()
Set objFile = Nothing
Set objFSO = Nothing
%>

【讨论】:

  • 与我的原始问题没有直接关系,但仍确认需要在高特权身份用户帐户下运行应用程序池。
猜你喜欢
  • 2011-04-07
  • 2010-12-09
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 2011-03-10
相关资源
最近更新 更多