获取服务开始时间的Java代码

时间:2016-07-10 19:13:28

标签: java windows service wmi

任何人都可以帮助我获取Java代码以获得Windows服务启动时间。就像我们如何使用Process Explorer一样。

使用Process Explorer启用服务启动时间的屏幕截图

enter image description here

2 个答案:

答案 0 :(得分:0)

这是特定于Windows的,因此Java或其库中没有内置任何内容。一种可能的方法是使用两个外部命令scwmic来提取此信息。

使用sc获取您感兴趣的服务的进程ID,例如服务W32Time:

C:\>sc queryex W32Time

SERVICE_NAME: W32Time
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 1072
        FLAGS              :

解析PID值(1072),然后执行

C:\Users\jim>wmic process where processid="1072"
Caption      CommandLine  CreationClassName  CreationDate               CSCreationClassName   CSName  Description  Execu
tablePath  ExecutionState  Handle  HandleCount  InstallDate  KernelModeTime  MaximumWorkingSetSize  MinimumWorkingSetSiz
e  Name         OSCreationClassName    OSName                                                                     OtherO
perationCount  OtherTransferCount  PageFaults  PageFileUsage  ParentProcessId  PeakPageFileUsage  PeakVirtualSize  PeakW
orkingSetSize  Priority  PrivatePageCount  ProcessId  QuotaNonPagedPoolUsage  QuotaPagedPoolUsage  QuotaPeakNonPagedPool
Usage  QuotaPeakPagedPoolUsage  ReadOperationCount  ReadTransferCount  SessionId  Status  TerminationDate  ThreadCount
UserModeTime  VirtualSize  WindowsVersion  WorkingSetSize  WriteOperationCount  WriteTransferCount
svchost.exe               Win32_Process      20160709170336.990827-420  Win32_ComputerSystem  HOME    svchost.exe
                           1072    765                       21060135
   svchost.exe  Win32_OperatingSystem  Microsoft Windows 7 Professional |C:\Windows|\Device\Harddisk0\Partition2  66053
               3433281             18371       17072          828              17616              142090240        28740
               8         17481728          1072       46                      185                  51
       232                      240                 9800               0                                   24
11076071      117727232    6.1.7601        28708864        6                    820

埋没在这个混乱中的是CreationDate字段(值20160709170336.990827-420),这就是你想要的。 -420似乎是以分钟为单位的时区偏移量。

答案 1 :(得分:0)

您可以实现一个能够运行Windows命令来查询Windows日志的类。这可以这种方式完成:

Runtime rt = Runtime.getRuntime();

    try {
        rt.exec("Your command");
    } catch (IOException e) {
        e.printStackTrace();
    }

使用wmic,您将能够找到您想要的开始时间,如上所述。

不幸的是,sc将无法为您提供此类信息。另一种方式(不确定它是否会起作用)是查询窗口的事件查看器以查找服务启动的已记录事件(我认为它的eventId是902)。获取信息后,您可以解析字符串以查找有关您感兴趣的服务的信息。

虽然有一个警告。如果您计划在较旧的Windows上安装应用程序,请小心,因为旧的Windows安装(XP等)可能并不总是包含有效的WMIC安装,这意味着该命令将不可用。