IIS 10应用程序池StartMode自动变为AlwaysRunning问题求助
优先定位触发变更的进程
你贴的事件日志里已经记录了触发配置修改的进程ID:Execution ProcessID="10120",这是最直接的排查线索。下次再出现配置自动变更时,第一时间打开任务管理器-详细信息面板,对照PID匹配对应的可执行文件,常见的触发进程包括VS发布工具、IIS管理工具、安全软件、域组策略客户端、运维同步脚本等,定位到进程后直接对应调整配置即可。
常见根因与修复方案
Visual Studio/Web Deploy 发布自动覆盖配置
.NET5项目默认的Web Deploy发布流程会同步IIS站点与应用池配置,如果你在发布配置中开启了应用初始化、站点预加载相关选项,每次发布都会自动将对应应用池的startMode改为AlwaysRunning。
修复方式:打开对应3个项目的Properties/PublishProfiles目录下的发布配置文件(.pubxml后缀),添加配置项<IncludeAppPool>False</IncludeAppPool>,禁止发布流程修改应用池配置;如果不需要预加载功能,直接删除pubxml中所有和applicationInitialization、AlwaysRunning相关的配置节点。IIS Application Initialization 模块自动修正配置
如果IIS安装了应用程序初始化(Application Initialization)角色服务,只要站点配置了预加载规则,模块会自动将关联应用池的启动模式改为AlwaysRunning,部分组策略、基线检查脚本也会定期执行这个修正逻辑。
修复方式:- 检查3个问题站点根目录下的
web.config,如果存在<system.webServer><applicationInitialization>节点且你不需要预加载功能,直接删除该节点 - 打开IIS全局配置文件
C:\Windows\System32\inetsrv\config\applicationHost.config,搜索3个问题应用池关联的applicationInitialization配置,删除无效的预加载规则 - 如果开发机加入了域,检查是否有域下发的IIS配置基线规则自动修改该参数。
- 检查3个问题站点根目录下的
IIS共享配置同步
如果IIS开启了共享配置功能,配置存储路径上的applicationHost.config被其他节点/管理员修改后,会自动同步到本机。直接打开IIS管理器的「共享配置」功能页检查,本地开发环境无多节点同步需求的话直接关闭该功能即可。
临时兜底方案
如果暂时无法定位根因,可以通过定时任务自动修正配置,避免影响日常使用:
- 新建PowerShell脚本,内容如下,替换为你自己的应用池名称:
$targetPools = @("AppPoolName1", "AppPoolName2", "AppPoolName3") Import-Module WebAdministration foreach ($pool in $targetPools) { $poolPath = "IIS:\AppPools\$pool" if (Test-Path $poolPath) { Set-ItemProperty $poolPath -Name startMode -Value "OnDemand" } }
- 将脚本加入系统任务计划程序,设置触发周期为每10-15分钟一次,运行权限配置为本机管理员即可。
内容的提问来源于stack exchange,提问作者plsrealist

