(请参阅下文关于加密的可能具有决定性的发现。)
我编写的服务输出一个日志文件。我正在尝试查看该日志文件。
不幸的是,Windows 拒绝让我查看该日志文件 - 当我尝试使用记事本打开它时,它显示:
您无权打开此文件。请与文件所有者或管理员联系以获取权限。
Notepad++ 也提示无法打开该文件(即使以管理员权限运行)。同样,尝试从 Firefox 等 Web 浏览器查看该文件也会失败,因为“访问该文件已被拒绝。”
事实上,我也无法复制该文件 - 甚至无法从管理控制台中的命令行复制(另请参阅下文,了解我使用 robocopy 执行此操作的尝试)。但是,移动和删除文件可以正常工作。
服务能打开文件。我可以知道,因为每当我启动服务时(此时它应该记录一些启动信息),文件大小都会增加
现在,根据安全选项卡中的特性该文件的对话框中,我的本地用户帐户具有该文件的读取和执行权限。
我已使用 检查了文件权限icactl.exe
。输出(略作删减以删除个人信息)如下:
PREDEFINED\IIS_IUSRS:(I)(RX)
<machine>\<user>:(I)(RX)
PREDEFINED\Administrators:(I)(F)
NT-AUTHORITY\SYSTEM:(I)(F)
PREDEFINED\User:(I)(RX)
NT-AUTHORITY\Authenticated Users:(I)(M)
同一文件夹中还有其他日志文件(来自其他工具)能打开。 它们的icacls
输出看起来完全相同。
我尝试让服务写入不同的文件名。但这并没有什么改变。
最后,我使用 Process Explorer XP 检查了是否有任何进程对该文件有句柄(服务未运行),但似乎并非如此。
我该怎么做才能访问该日志文件?
正如评论中所建议的,我尝试使用 robocopy 复制文件,但无济于事:
C:\...\logs>robocopy C:\...\logs C:\...\logcopy svc.log /b
-------------------------------------------------------------------------------
ROBOCOPY :: Robustes Dateikopieren für Windows
-------------------------------------------------------------------------------
Gestartet: Montag, 21. Juni 2021 10:56:48
Quelle : C:\...\logs\
Ziel : C:\...\logcopy\
Dateien : svc.log
Optionen: /DCOPY:DA /COPY:DAT /B /R:1000000 /W:30
------------------------------------------------------------------------------
1 C:\...\logs\
Neue Datei 700 svc.log
2021/06/21 10:56:48 FEHLER 2 (0x00000002) Dateiattribute werden geändert C:\...\logs\svc.log
Das System kann die angegebene Datei nicht finden.
------------------------------------------------------------------------------
Insgesamt KopiertÜbersprungenKeine Übereinstimmung FEHLER Extras
Verzeich.: 1 0 1 0 0 0
Dateien: 1 0 0 0 1 0
Bytes: 700 0 0 0 700 0
Zeiten: 0:00:00 0:00:00 0:00:00 0:00:00
Beendet: Montag, 21. Juni 2021 10:56:48
C:\...\logs
虽然该消息来自德语 Windows,但用英语来说,该消息基本上是这样的:
ERROR2 (0x00000002) 文件属性已修改
系统找不到指定的文件。
更新:我可能发现了正在发生的事情的痕迹:保存日志文件的目录已选中“加密内容以保护数据”复选框。
如果我让我的服务将其日志文件写入另一个未加密的目录,我就可以完美地打开日志文件。
不幸的是,Windows 说它无法从我实际想要获取日志文件的目录中删除“加密”标志。