You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除Service Fabric创建的目录时遇UnauthorizedAccessException异常

Service Fabric日志目录权限拒绝无法删除:原因与解决办法

问题现象

尝试删除Service Fabric生成的C:\SfDevCluster\log\Traces目录时,执行PowerShell命令报错权限拒绝:

PS C:\SfDevCluster\log> Remove-Item -path .\Traces\ -recurse -force
Remove-Item : Cannot remove item C:\SfDevCluster\log\Traces\fabric_traces_9.1.1390.9590_133197288382564134_0.etl: Access to the path is denied.
At line:1 char:1
+ Remove-Item -path .\Traces\ -recurse -force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (fabric_traces_9...382564134_0.etl:FileInfo) [Remove-Item], ArgumentException
    + FullyQualifiedErrorId : RemoveFileSystemItemArgumentError,Microsoft.PowerShell.Commands.RemoveItemCommand
Remove-Item : Cannot remove item C:\SfDevCluster\log\Traces\lease_traces_9.1.1390.9590_133197288382737081_0.etl: Access to the path is denied.
At line:1 char:1
+ Remove-Item -path .\Traces\ -recurse -force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (lease_traces_9....382737081_0.etl:FileInfo) [Remove-Item], ArgumentException
    + FullyQualifiedErrorId : RemoveFileSystemItemArgumentError,Microsoft.PowerShell.Commands.RemoveItemCommand
Remove-Item : Cannot remove item C:\SfDevCluster\log\Traces\: 目录不为空。
At line:1 char:1
+ Remove-Item -path .\Traces\ -recurse -force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\SfDevCluster\log\Traces\:DirectoryInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

执行get-acl查看文件权限也被拒绝:

PS C:\SfDevCluster\log\Traces> get-acl *
get-acl : 无权访问
At line:1 char:1
+ get-acl *
+ ~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-Acl], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetAclCommand

目录权限显示管理员组拥有完全控制,但文件权限无法读取:

PS C:\SfDevCluster\log> Get-Acl .\Traces\ |  Format-List

Path   : Microsoft.PowerShell.Core\FileSystem::C:\SfDevCluster\log\Traces\
Owner  : BUILTIN\Administratorer
Group  : NT AUTHORITY\SYSTEM
Access : BUILTIN\Administratorer Allow  FullControl
         NT AUTHORITY\SYSTEM Allow  FullControl
         BUILTIN\Users Allow  ReadAndExecute, Synchronize
         NT AUTHORITY\Authenticated Users Allow  Modify, Synchronize
         NT AUTHORITY\Authenticated Users Allow  -536805376
Audit  :
Sddl   : O:BAG:SYD:(A;OICIID;FA;;;BA)(A;OICIID;FA;;;SY)(A;OICIID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)

确认当前用户属于管理员组,但操作仍受限:

PS C:\SfDevCluster\log\Traces> whoami
puter\caec
PS C:\SfDevCluster\log\Traces> net user caec|select-string medlem

本地组成员身份        *Administratorer
全局组成员身份:      *无

执行takeown仅能获取目录所有权,文件权限仍无法获取:

takeown /F .\Traces\ /R /D Y

SUCCESS: 文件夹 "C:\SfDevCluster\log\Traces\" 现在由用户 "puter\caec" 拥有。

INFO: 无权访问。( "C:\SfDevCluster\log\Traces\fabric_traces_9.1.1390.9590_133197288382564134_0.etl" )

INFO: 无权访问。( "C:\SfDevCluster\log\Traces\lease_traces_9.1.1390.9590_133197288382737081_0.etl" )

GUI查看文件权限时提示:

You do not have permission to view or edit this object's permission settings.

重启Windows可临时解决,但该问题多次出现。

根本原因

  1. 进程文件锁定:Service Fabric的核心进程(如FabricHost.exe、Fabric.exe)或ETW日志追踪会话仍持有.etl文件的句柄,Windows会阻止对被活跃进程锁定的文件进行删除、权限修改操作。
  2. 文件级特殊权限:Service Fabric生成.etl文件时,会单独设置文件权限(中断目录权限继承),仅允许SYSTEM或Service Fabric服务账户访问,即使目录开放管理员权限,文件本身的权限仍会限制操作。
  3. UAC权限过滤:默认情况下,PowerShell或文件管理器以标准用户权限运行,UAC会过滤部分管理员权限,导致无法访问被严格保护的系统级文件。
  4. ETW日志特性:.etl是Windows事件追踪日志文件,若对应的ETW会话未停止,系统会持续锁定文件,直到会话结束。

无需重启的解决办法

1. 停止Service Fabric相关进程

  • 任务管理器中结束FabricHost.exe、Fabric.exe、FabricGateway.exe等进程;
  • 或通过PowerShell停止服务:
    Stop-Service FabricHostSvc
    Stop-Service FabricSvc
    
    进程停止后再尝试删除或修改权限。

2. 定位并释放文件锁

  • 使用Process Explorer(微软官方工具),按Ctrl+F搜索被锁定的.etl文件名,找到持有句柄的进程并结束,即可操作文件。

3. 高权限执行命令

  • 右键PowerShell选择以管理员身份运行,依次执行:
    # 获取所有.etl文件所有权
    takeown /F "C:\SfDevCluster\log\Traces\*.etl" /A
    # 赋予管理员组完全控制权限
    icacls "C:\SfDevCluster\log\Traces\*.etl" /grant Administrators:F /T
    # 删除目录
    Remove-Item -path "C:\SfDevCluster\log\Traces\" -recurse -force
    

4. 停止ETW追踪会话

  • 管理员身份打开命令提示符,查看活跃ETW会话:
    logman query -ets
    
  • 找到Service Fabric相关会话,执行停止命令:
    logman stop <会话名称> -ets
    
    会话停止后日志文件会被释放。

预防措施

  • 删除日志前先停止Service Fabric集群或日志收集服务;
  • 配置Service Fabric日志自动清理策略,减少手动操作需求;
  • 定期重启Service Fabric相关服务,避免文件句柄长期锁定。

内容的提问来源于stack exchange,提问作者Jason Hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:05:28