我们可以从与我们的 PC 位于同一域中的远程 PC 读取事件日志,而下面的代码没有任何问题。如您所见,我们与“EventLogSession”建立了联系。但是,如果我们尝试从位于另一个网络区域(生产机器区域)并且不是域成员的远程 PC(Win XP)读取事件日志数据,我们总是会收到错误:“没有更多可用的端点端点映射器”附加信息:由于机器不在域中,我们将“域”定义为空或“”。我们检查了远程PC端,机器上的所有防火墙都被禁用了。我们已经用几台远程 PC(生产机器)进行了这个测试。但总是同样的错误。有什么问题?我们可以使用“EventLogSession”吗 连接?WinXP对此是否有障碍?我使用的远程用户在远程 PC 上具有完全的管理员权限。
public void Read_EventLog()
{
try
{
string queryString = "*[System/Level=2]"; // XPATH Query
SecureString pw = new NetworkCredential("", "Password").SecurePassword;
EventLogSession session = new EventLogSession(
"10.92.116.999", // Remote Computer
null, // Domain
"remoteuser", // Username
pw,
SessionAuthentication.Default);
pw.Dispose();
// Query the Application log on the remote computer.
EventLogQuery query = new EventLogQuery("Application", PathType.LogName, queryString);
query.Session = session;
query.ReverseDirection = true;
EventLogReader logReader = new EventLogReader(query);
// Display event info
DisplayEventAndLogInformation(logReader);
}
catch (EventLogException e)
{
using (StreamWriter sw = File.AppendText((error_path)))
{
sw.WriteLine("Eventlog Connection Error=" + e.Message + Convert.ToString(DateTime.Now));
}
}
}
private void DisplayEventAndLogInformation(EventLogReader logreader)
{
System.IO.File.WriteAllText(eventlog_path, string.Empty);
using (StreamWriter sw = File.AppendText((eventlog_path)))
{
sw.WriteLine("Read Time=" + Convert.ToString(DateTime.Now)+ Environment.NewLine+ Environment.NewLine);
}
for (EventRecord eventInstance = logreader.ReadEvent();
null != eventInstance; eventInstance = logreader.ReadEvent())
{
Console.WriteLine("----------------------------------------------------");
Console.WriteLine("Event ID: {0}", eventInstance.Id);
Console.WriteLine("Publisher:{0}", eventInstance.ProviderName);
Console.WriteLine("Keywords:{0}", eventInstance.FormatDescription());
using (StreamWriter sw = File.AppendText((eventlog_path)))
{
sw.WriteLine("Id="+ eventInstance.Id + " Provider=" + eventInstance.ProviderName + " Detail="+ eventInstance.FormatDescription()+ " LogTime="+ eventInstance.TimeCreated + Environment.NewLine);
}
}
}