我一直在尝试使用 C# 以编程方式进入“C:\Windows\System32\winevt\Logs”文件夹,以便我可以将事件日志文件复制到备份目录,然后将事件日志作为每日备份的一部分清除设备,但我似乎无法访问此目录。

我尝试将应用程序 list 更改为在管理员 ( ) 下运行,这在我执行程序时给了我 UAC 提示,我什至在 NT AUHORITY\SYSTEM 身份下生成了一个 shell 来执行代码,但它仍然说这是一个无效的路径,即使我可以手动进入管理 shell 和 SYSTEM shell 下的目录。

我已将其隔离为无法进入 winevt 目录。
我使用此代码来查看是否可以访问该目录。

Environment.CurrentDirectory = System.Environment.SystemDirectory + @"\winevt\";

只为接收

System.IO.DirectoryNotFoundException: 找不到路径“C:\Windows\system32\winevt\”的一部分。
在 System.IO.__Error.WinIOError(Int32 errorCode, String mightFullPath)
在 System.IO.Directory.SetCurrentDirectory(字符串路径)
在 System.Environment.set_CurrentDirectory(字符串值)
在 dev_EventLog.Program.Main(String[] args) 在 D:\SourceCodes\dev_EventLog\dev_EventLog\Program.cs:line 30

我尝试了许多不同的方法来指定目录,但都是一样的,我还尝试了 System32 和 10 个左右的不同子文件夹,我试过 winevt 是唯一一个这样做的。

这让我发疯了,任何人都知道为什么这在 C# 下不起作用,或者我被迫使用 VBScript 来执行此操作,因为以下 VBScript 代码可以复制事件日志文件。

昏暗的文件系统
set filesys=CreateObject("Scripting.FileSystemObject")
filesys.CopyFile "C:\Windows\System32\winevt\Logs\Application.evtx", "C:\rusl\Application.evtx"

最佳答案

您的应用程序是否在 64 位版本的 Windows 上作为 32 位应用程序运行?如果是这样,任何对 %windir%\System32 的访问都会被重定向到 %windir%\SystemWOW64(其中没有 winevt 目录)。

如果您使用 %windir%\Sysnative\winevt 您应该能够访问它。

关于c# - 有人知道为什么我无法在 C# 中以编程方式访问 winevt 文件夹吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2958081/

10-11 17:25