任何人都知道为什么我无法在C#中以编程方式访问winevt文件夹?

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

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

我把它隔离到了不能进入winevt目录。 我使用此代码来查看是否可以访问该目录。

Environment.CurrentDirectory = System.Environment.SystemDirectory + @“\ winevt \”;

只收到

System.IO.DirectoryNotFoundException:找不到路径’C:\ Windows \ system32 \ winevt \’的一部分。 at System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)at System.IO.Directory.SetCurrentDirectory(String path)at System.Environment.set_CurrentDirectory(String value)at dev_EventLog.Program.Main(String [] args)in D:\ SourceCodes \ dev_EventLog \ dev_EventLog \ Program.cs:第30行

我已经尝试了许多不同的方法来指定目录,但它们都是一样的,我也尝试过不同的System32子文件夹,而且我尝试过winevt是唯一一个这样做的人。

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

dim filesys 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您应该能够访问它。

根据John Rasch的建议,在我将system32更改为sysnative后,我现在可以使用的代码。

 string LogFileDirectory = @"C:\Windows\Sysnative\winevt\Logs\"; string LogFileExtension = ".evtx"; string Date = DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString(); string BackupDir = @"C:\Backups\" + Date + "\\"; Directory.CreateDirectory(BackupDir); foreach (EventLog log in EventLog.GetEventLogs()) { string source = LogFileDirectory + log.Log + LogFileExtension; string dest = BackupDir + log.Log + LogFileExtension; try { File.Copy(source, dest); } catch (Exception e) { Console.WriteLine("Error occured :" + e.Message); Console.WriteLine(e); } finally { if (!File.Exists(dest)) { Console.WriteLine("Backup Failed for " + log.Log); } else { Console.WriteLine("Backup Successful for " + log.Log); //log.Clear(); // Commented out during development } } }