이벤트 로그를 필요한 형식으로 파일에 보관하는 기능이 있습니다.WMI로 응용 프로그램 이벤트 로그를 백업 할 때 seBackupPrivilige가 필요합니다.
Windows 이벤트 로그 (Application
, Security
및 System
)에 대해 테스트하고 있습니다. 모든 테스트에서 코드는 로컬 관리자 권한으로 실행됩니다.
내 개발 환경에서 코드는 각 로그 파일을 "* .evt"파일 이름으로 백업합니다. Security
및 System
로그가 제대로 작동하지만 Application
로그를 처리하는 단계 ManagementException
발생 대상 기준 시스템에서
예외의 상호 작용은 아래에 포함되어 있습니다. 내 질문은 이것이 보안 권한 문제라고 생각하는 것이 맞습니까? 내 모든 원하는 경우에이 코드가 작동하도록하는 코드 변경 사항은 무엇입니까? 확실한 답을 얻지 못하면 생각과 생각이 감사하게됩니다.
ErrorCode가 : 매개 변수 정보를
을 ExecMethod : 설명 :ErrorInformation을 AccessDenied 로그 파일을 오픈하지만 백업하는 데 실패, 특권의 오류
작동 Win32_NTEventlogFile.Name = "C : \ WINDOWS \ system32 \ config \ AppEvent.Evt "
특권 아니 도움말 : - SeBackupPrivilege
PrivilegesRequired : - SeBackupPrivilege
에는 ProviderName : WinMgmt에
상태 코드 : 모든 데이터는 정오표에 대한 사과 있도록 전사된다 2147749891
using System.Management;
/* ... Omitted for brevity */
public static void WMIBackup(String logName, String targetFile)
{
ManagementScope scope = new ManagementScope("root\\CIMV2");
scope.Options.Impersonation = ImpersonationLevel.Impersonate;
scope.Options.EnablePrivileges = true;
ObjectQuery query = new ObjectQuery(
String.Format("SELECT * FROM Win32_NTEventLog WHERE LogFileName={0}",
logName)
);
using (ManagementObjectSearcher search =
new ManagementObjectSearcher(scope, query))
{
var logs = search.Get();
if (logs.Count != 1)
throw new ArgumentOutOfRangeException("logName not found");
foreach (ManagementObject log in logs)
{
ManagementClass eventLogClass =
new ManagementClass("Win32_NTEventLogFile");
ManangementBaseObject params =
eventLogClass.GetMethodParameters("BackupEventLog");
params["ArchiveFileName"] = targetFile;
log.InvokeMethod(
"BackupEventLog",
params,
new InvokeMethodOptions(
null,
InvokeMethodOptions.InfiniteTimeout)
);
}
}
}
.
Dammit, 나는이 코드를 일대일로 복사했는데 실패했습니다. 이유를보기 위해 잠시 나를 필요로했다. 그는 그가 검색어를 타이핑하는 것을 엉망으로 만든다. 대신 Win32_NTEventLogFile에서 선택 * LogFileName = {0}'이어야합니다. – c00000fd
@ c00000fd가 업데이트되었습니다. – Jodrell