.NetCore程序寄托于IIS部署时提示:进程无法访问该文件,因为它正在被其他进程使用。

阅文时长 | 0.55分钟 字数统计 | 884.8字符
主要内容 | 1、引言&背景 2、解决详细步骤 3、声明与参考资料
『.NetCore程序寄托于IIS部署时提示:进程无法访问该文件,因为它正在被其他进程使用。』
编写人 | SCscHero 编写时间 | 2022/2/17 PM9:42
文章类型 | 系列 完成度 | 已完成
座右铭 每一个伟大的事业,都有一个微不足道的开始。

一、引言&背景   完成度:100%

a) 应对问题

.NetCore程序寄托于IIS部署时提示:进程无法访问该文件,因为它正在被其他进程使用。如图,博主是英文版的WindowsServer系统,提示:The process cannot access the file because it is being used by another process.

b) 环境说明

  • .NetCore2.2开发框架
  • Internet Information Services(Version 8.5.9600.16384)
  • Windows Server 2012 R2

二、解决详细步骤   完成度:100%

a) 常规步骤

先说常规的步骤,能解决大多数时候的问题:一般报文件使用于另外的进程,我们第一反应就是停服务、停App pool中的App。PS:如果不想通过停服务来部署,那么可以通过设置web.config中的aspNetCore的hostingModel属性,如果值是InProcess则为进程内托管,修改为"OutOfProcess"则为进程外托管,可以尝试热部署。

<aspNetCore processPath="dotnet" arguments=".\AppName.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess"/>

更多参数可参阅三章节的官方文档。

b) 其他Case

但如果常规步骤无法解决此问题,即服务停了,应用程序池应用也关了,还是报文件占用,且不知道是什么进程占用了,又没法重启服务器。那么以下步骤可能有用:

  1. 备份一下旧文件,然后快捷键DELETE删除。这时候Windows(英文版)会提示The action can't be completed because the file is open in [XXXXX]。比如如图,博主的dll文件就被进程IIS Worker Process使用了。
  1. 那么知道了是被什么进程使用了,我们则到任务管理器查看进程List,如图:博主的情况比较复杂,因为服务器上跑了多个IIS服务,且是多用户的。因此需要查看各个用户的进程,以及判断多个IIS Worker Process中哪个是我们部署服务的进程。这里教大家一招:默认的任务管理器是不会展示命令行(Command line)的列的,需要手动右击Title调出来。通过命令行-ap参数后的AppName,我们可以知道是哪个进程锁住了。然后End Task即可。

三、声明与参考资料   完成度:100%

微软官方文档:关于web.config的配置文件说明

原创博文,未经许可请勿转载。

如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。

posted on 2022-02-18 11:09  SCscHero  阅读(661)  评论(0编辑  收藏  举报

导航