我試圖打開使用OpenBackupEventLog功能在Windows 7 x64的機器上採用.evtx文件,但是我不斷獲取ERROR_FILE_NOT_FOUND(錯誤代碼2)即使該文件確實存在。ERROR_FILE_NOT_FOUND意外返回OpenBackupEventLog功能
我的P/Invoke聲明/地步,我所說的文件是:
[DllImport("advapi32.dll", SetLastError = true, ExactSpelling = false, EntryPoint = "OpenBackupEventLog")]
public static extern IntPtr OpenBackupEventLog(
[MarshalAs(UnmanagedType.LPTStr)]string uncServerName,
[MarshalAs(UnmanagedType.LPTStr)]string fileName);
IntPtr ptr = NativeMethods.OpenBackupEventLog(null, filename);
if (ptr == IntPtr.Zero && File.Exists(filename))
{
// This exception is thrown and so the file does exist
throw new Win32Exception(string.Format("Failed to open event log archive '{0}'", filename));
}
注意,這是一個x86的過程中。
我能想到的唯一的問題是,問題歸結爲Unicode/ANSI編組(以前我記得取而代之的是ERROR_INVALID_PARAMETER
),但是我仔細檢查過,並且在編組時沒有任何效果。
爲什麼無法打開文件/我該如何診斷?
由於您懷疑字符串編組,我建議嘗試沒有這些顯式屬性的字符串參數。至於進一步診斷:檢查此方法是否由[ProcMon](http://technet.microsoft.com/en-us/sysinternals/bb896645)記錄;如果是這樣,它會顯示您正在訪問的文件的確切名稱。 – 2012-01-09 14:10:38
噢,還有_do_在x64過程中嘗試它以消除重定向層將您搞砸的可能性。這些文件在'%SYSTEMROOT%\ system32'中嗎? (C:\ Windows \ system32) - 那肯定是一個很大的嫌疑犯。 – 2012-01-09 14:12:10
@romkyns這些文件在我的桌面 – Justin 2012-01-09 17:54:09