我一直在尝试使用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 \'的一部分。 在System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath) 在System.IO.Directory.SetCurrentDirectory(String path) at System.Environment.set_CurrentDirectory(String value) 在d:\ SourceCodes \ dev_EventLog \ dev_EventLog \ Program.cs中的dev_EventLog.Program.Main(String [] args):第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”
答案 0 :(得分:6)
您的应用程序是否在64位版本的Windows上作为32位应用程序运行?如果是,则对%windir%\System32
的任何访问都会重定向到%windir%\SystemWOW64
(没有winevt
目录)。
如果您使用%windir%\Sysnative\winevt
,则应该可以访问它。
答案 1 :(得分:0)
根据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
}
}
}