IIS 10应用程序池崩溃-WAS事件5011-VCRUNTIME140.dll问题

问题描述

在Windows Server 2016虚拟机上运行IIS 10,以运行用vbscript编写的经典ASP应用程序。当我执行sql语句从.xlsx Excel文件中的.accdb文件中插入表时,应用程序池间歇性崩溃。与.accdb文件关联的所有脚本都可以正常工作-一旦将.xlsx文件带入方程式中,便是出现问题了。脚本如下:

Set DatabaseConnection = Server.CreateObject("ADODB.Connection")
DatabaseConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source= C:\inetpub\wwwroot\ORTDEV\QHT2.accdb"
TST0FilePath="C:\inetpub\wwwroot\ORTDEV\TST0ORIG.xlsx"
ssqlinsertresn ="SELECT * INTO TST0 FROM [Excel 12.0; HDR=YES;DATABASE=" & TST0FilePath & "]." & "[TASKRSRC$]"
DatabaseConnection.Execute ssqlinsertresn
  1. 运行脚本时,.xlsx文件和.accdb文件都会关闭。我还尝试了各种Excel文件来排除损坏的.xlsx文件
  2. 我相信脚本是正确的。在Windows 7上使用IIS 7.5,我已经在笔记本电脑上测试了脚本,没有出现任何问题。我还将该脚本另存为.vbs文件,并成功登录到服务器和笔记本电脑。
  3. 通过IIS在服务器上运行时,它可能使应用程序池崩溃4次,但它是间歇性的并且不一致。即使崩溃,脚本仍将执行并执行sql语句;但是,当应用程序池崩溃时,所有会话变量都将按预期清除。
  4. 我检查了cpu使用率高和内存泄漏-没有发现任何东西。
  5. 我已启用跟踪,但没有针对该问题的跟踪日志。
  6. 我打开了发送到浏览器的错误-由于脚本按预期执行,因此不会出现错误
  7. 托管管道模式设置为经典,尽管我也测试了集成。 .Net CLR版本设置为v2.0.50727,但我也测试了V4.0.30319。启用设置为true的32位应用程序。由于我正在使用会话变量,因此最大工作进程数设置为1。快速故障保护功能在5分钟内最多打开10次故障。
  8. 我正在开发站点上进行测试,并且是唯一使用它的人。
  9. DebugDiag说:“请与供应商Microsoft Corporation联络,以解决有关以下文件的问题:C:\ Windows \ System32 \ VCRUNTIME140.dll”。基本上,看起来像没有与VCRUNTIME140.dll相关的异常。我可以看到该目录中安装了该dll,因此好像它丢失了。
  10. 事件查看器显示事件ID 5011-“服务于应用程序池'ORTDEV'的进程与Windows Process Activation Service发生致命的通信错误。”
  11. 此虚拟机上运行的不是很多。已安装多个sql Server,但仅使用2014。

对下一步有什么建议吗?

Thx

基思

解决方法

VCRUNTIME140.dll是一个动态链接库文件。它的工作方式与可执行文件相似,但仅在使用它的软件需要时才加载。使用excel或其他Office 365产品时,也将使用它。

VCRUNTIME140.dll是Visual Studio 2015的Visual C ++可再发行组件使用的文件。因此,如果意外删除,损坏或无法运行任何C ++程序包组成部分,则程序可能不会响应并失败。您遇到的错误通常是其他人遇到的。解决此问题的最简单方法是卸载并重新安装。

  1. 按Win + R并键入appwiz.cpl,查找名称以Microsoft Visual C ++ 2015(或Microsoft Visual C ++ 2015-2019)开头的条目,然后卸载。
  2. 重新启动计算机并执行全面扫描,清除所有检测到的威胁。
  3. 按照此link下载最新的Visual C ++ 2015版本的官方发行版。
,

将应用程序池标识从默认的“ ApplicationPoolIdentity”更改为系统帐户即可解决此问题。