我试图打开使用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