C# 如何以编程方式或定期清除Operational PrintService事件日志?
我们正在尝试对Windows Server 2008 R2上运行的打印机进行内部打印审核。在中通过事件查看器启用日志后: 应用程序和服务日志->Microsoft->Windows->打印服务->操作 我成功地获取了ID为307的事件,方法是根据我的需要定制答案,然后将这些事件存储在数据库中,以便在其他应用程序中使用C# 如何以编程方式或定期清除Operational PrintService事件日志?,c#,event-log,C#,Event Log,我们正在尝试对Windows Server 2008 R2上运行的打印机进行内部打印审核。在中通过事件查看器启用日志后: 应用程序和服务日志->Microsoft->Windows->打印服务->操作 我成功地获取了ID为307的事件,方法是根据我的需要定制答案,然后将这些事件存储在数据库中,以便在其他应用程序中使用 // Build formatted query string string eventID = "307"; string log
// Build formatted query string
string eventID = "307";
string logSource = "Microsoft-Windows-PrintService/Operational";
string sQuery = String.Format("*[System/EventID={0}]", eventID);
// Define query and reader
var elQuery = new EventLogQuery(logSource, PathType.LogName, sQuery);
var elReader = new System.Diagnostics.Eventing.Reader.EventLogReader(elQuery);
// List for holding events
List<EventRecord> eventList = new List<EventRecord>();
for (EventRecord eventInstance = elReader.ReadEvent();
null != eventInstance; eventInstance = elReader.ReadEvent())
{
eventList.Add(eventInstance);
}
仅输出“应用程序和服务日志”下列出的更高级别日志:
提示您不能使用EventLog类访问Microsoft Windows-*事件日志的答案
是否可以通过编程方式清除此特定事件日志(不仅307个事件,还包括操作日志中的其他事件)
我想将这个小程序设置为每隔几分钟、几小时或几天自动运行一次,但现在需要检查数据库中是否存在现有事件,并添加自上次运行以来的几个新事件。我不知道如何使用现有类来处理事件日志,但是从应用程序调用似乎是可行的
static void Main(string[] args){
const string logSource = "Microsoft-Windows-PrintService/Operational";
/* store print jobs */
ClearLog(logSource);
}
public static void ClearLog(string logName)
{
var psi = new ProcessStartInfo(
"wevtutil.exe",
String.Format("cl {0}", logName));
psi.Verb = "runas"; // Run as administrator
using (var p = new Process())
{
p.StartInfo = psi;
p.Start();
}
}
我使用打印服务器上的任务调度器将其设置为每小时运行一次,目前正在运行。由于它被设置为在最高级别运行,我不知道是否需要“runas”,但要清除日志,进程确实需要管理权限
我意识到,如果在查询和清除日志之间出现新的作业,那么这可能会遗漏一些内容,但我们只有大约30台打印机,我们不会使用这些数字,而只是看看是否有由于使用率低而可以删除的打印机
Application
HardwareEvents
Internet Explorer
Key Management Service
OAlerts // Not sure where OAlerts and
PreEmptive // PreEmptive are in the Event Viewer
Security
System
Windows PowerShell
static void Main(string[] args){
const string logSource = "Microsoft-Windows-PrintService/Operational";
/* store print jobs */
ClearLog(logSource);
}
public static void ClearLog(string logName)
{
var psi = new ProcessStartInfo(
"wevtutil.exe",
String.Format("cl {0}", logName));
psi.Verb = "runas"; // Run as administrator
using (var p = new Process())
{
p.StartInfo = psi;
p.Start();
}
}