.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
但如果常规步骤无法解决此问题,即服务停了,应用程序池应用也关了,还是报文件占用,且不知道是什么进程占用了,又没法重启服务器。那么以下步骤可能有用:
- 备份一下旧文件,然后快捷键DELETE删除。这时候Windows(英文版)会提示The action can't be completed because the file is open in [XXXXX]。比如如图,博主的dll文件就被进程IIS Worker Process使用了。
- 那么知道了是被什么进程使用了,我们则到任务管理器查看进程List,如图:博主的情况比较复杂,因为服务器上跑了多个IIS服务,且是多用户的。因此需要查看各个用户的进程,以及判断多个IIS Worker Process中哪个是我们部署服务的进程。这里教大家一招:默认的任务管理器是不会展示命令行(Command line)的列的,需要手动右击Title调出来。通过命令行-ap参数后的AppName,我们可以知道是哪个进程锁住了。然后End Task即可。
三、声明与参考资料 完成度:100%
原创博文,未经许可请勿转载。
如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。