我正在开发一个与不稳定的第三方 C++ DLL 交互的 Web 服务。
它经常抛出AccessViolationException
(即,DLL 内的崩溃),唯一的恢复方法是回收应用程序池。
有没有办法以编程方式回收应用程序池?
注意:我尝试更改我的 .NET DLL 和 web.config 的时间戳,但这似乎不足以让 w3wp.exe 进程卸载本机 C++ DLL。我无法触摸 C++ DLL,因为它返回错误:“DLL 正在使用中”。
如果您有权访问该框,则可以使用 appcmd.exe :
C:\dev>\windows\system32\inetsrv\appcmd.exe apppool /?
Administration of application pools
APPCMD (command) APPPOOL <identifier> <-parameter1:value1 ...>
Supported commands:
list List application pools
set Configure application pool
add Add new application pool
delete Delete application pool
start Start application pool
stop Stop application pool
recycle Recycle application pool
(To get help for each command use /?, e.g. 'appcmd.exe add site /?'.)
要在代码中使用它,您需要使用它System.Diagnostics.Process
来运行适当的回收命令。