2012-06-25 41 views
1

我有一个应用程序,需要获得最后一次关机时间。我使用EventLog类来获取关机时间。我有单独的类文件,旨在读取/写入事件日志。 ReadPowerOffEvent函数旨在获取关机事件。如何获得最后一次关机时间使用C#

public void ReadPowerOffEvent() 
    { 
     EventLog eventLog = new EventLog(); 
     eventLog.Log = logName; 
     eventLog.MachineName = machineName; 

     if (eventLog.Entries.Count > 0) 
     { 
      for (int i = eventLog.Entries.Count - 1; i >= 0; i--) 
      { 
       EventLogEntry currentEntry = eventLog.Entries[i]; 

       if (currentEntry.InstanceId == 1074 && currentEntry.Source=="USER32") 
       { 
        this.timeGenerated = currentEntry.TimeGenerated; 
        this.message = currentEntry.Message; 
       } 
      } 
     } 
    } 

但是,只要它试图获取事件条目数,就会抛出一个IOException,指出“找不到网络路径”。我试图解决,但我失败了。请帮助我...

+0

您可以使用[本答案] [1]确定使用WMI的正常运行时间。 [1]:http://stackoverflow.com/questions/972105/retrieve-system-uptime-using-c-sharp – Kane

+1

我觉得这个老问题的帮助you.http://stackoverflow.com/问题/ 1631933 /获取日期时间的最后窗口关闭事件使用网 –

+3

@凯恩,我做了这个系统时间的事情已经在我的应用程序。我的问题是要获取PC上次关机的时间,并检测它是关机事件还是重新启动并计算关机时间。这就是为什么我需要使用EventViewer。反正,谢谢。 – jchoudhury

回答

0

您必须在计算机上运行“远程注册表”服务(或要运行此应用程序的机器上)。我怀疑这个服务设置为手动在你的机器上启动。您可能必须将此服务的设置更改为自动。

如果此应用程序将在其他机器上运行,您可能需要在应用程序中添加一些逻辑以检查以确保此服务首先运行。如果不是,那么你需要通过你的应用程序启动它。

注:

的“远程注册表”服务使远程用户能修改你的计算机上的注册表设置。默认情况下,“Remote Registry”服务的“启动类型”设置可能设置为“自动”或“手动”,这对于单个用户(或)笔记本个人电脑用户来说是一种安全风险。 因此,要确保只有您的计算机上的用户可以修改系统注册表,请禁用此“远程注册表”服务。

相关问题