Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式或定期清除Operational PrintService事件日志?_C#_Event Log - Fatal编程技术网

C# 如何以编程方式或定期清除Operational PrintService事件日志?

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

我们正在尝试对Windows Server 2008 R2上运行的打印机进行内部打印审核。在中通过事件查看器启用日志后:

应用程序和服务日志->Microsoft->Windows->打印服务->操作

我成功地获取了ID为307的事件,方法是根据我的需要定制答案,然后将这些事件存储在数据库中,以便在其他应用程序中使用

        // 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();              
        }
    }