问题描述
在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
- 运行脚本时,.xlsx文件和.accdb文件都会关闭。我还尝试了各种Excel文件来排除损坏的.xlsx文件。
- 我相信脚本是正确的。在Windows 7上使用IIS 7.5,我已经在笔记本电脑上测试了脚本,没有出现任何问题。我还将该脚本另存为.vbs文件,并成功登录到服务器和笔记本电脑。
- 通过IIS在服务器上运行时,它可能使应用程序池崩溃4次,但它是间歇性的并且不一致。即使崩溃,脚本仍将执行并执行sql语句;但是,当应用程序池崩溃时,所有会话变量都将按预期清除。
- 我检查了cpu使用率高和内存泄漏-没有发现任何东西。
- 我已启用跟踪,但没有针对该问题的跟踪日志。
- 我打开了发送到浏览器的错误-由于脚本按预期执行,因此不会出现错误。
- 托管管道模式设置为经典,尽管我也测试了集成。 .Net CLR版本设置为v2.0.50727,但我也测试了V4.0.30319。启用设置为true的32位应用程序。由于我正在使用会话变量,因此最大工作进程数设置为1。快速故障保护功能在5分钟内最多打开10次故障。
- 我正在开发站点上进行测试,并且是唯一使用它的人。
- DebugDiag说:“请与供应商Microsoft Corporation联络,以解决有关以下文件的问题:C:\ Windows \ System32 \ VCRUNTIME140.dll”。基本上,看起来像没有与VCRUNTIME140.dll相关的异常。我可以看到该目录中安装了该dll,因此好像它丢失了。
- 事件查看器显示事件ID 5011-“服务于应用程序池'ORTDEV'的进程与Windows Process Activation Service发生致命的通信错误。”
- 此虚拟机上运行的不是很多。已安装多个sql Server,但仅使用2014。
对下一步有什么建议吗?
Thx
基思
解决方法
VCRUNTIME140.dll是一个动态链接库文件。它的工作方式与可执行文件相似,但仅在使用它的软件需要时才加载。使用excel或其他Office 365产品时,也将使用它。
VCRUNTIME140.dll是Visual Studio 2015的Visual C ++可再发行组件使用的文件。因此,如果意外删除,损坏或无法运行任何C ++程序包组成部分,则程序可能不会响应并失败。您遇到的错误通常是其他人遇到的。解决此问题的最简单方法是卸载并重新安装。
- 按Win + R并键入appwiz.cpl,查找名称以Microsoft Visual C ++ 2015(或Microsoft Visual C ++ 2015-2019)开头的条目,然后卸载。
- 重新启动计算机并执行全面扫描,清除所有检测到的威胁。
- 按照此link下载最新的Visual C ++ 2015版本的官方发行版。
将应用程序池标识从默认的“ ApplicationPoolIdentity”更改为系统帐户即可解决此问题。