2016-07-10 5 views

ответ

0

Это очень Windows, специфический, так что нет ничего встраивается в Java или его библиотеки для этого. Одним из возможных подходов является использование двух внешних команд: sc и wmic для извлечения этой информации.

Используйте sc, чтобы получить идентификатор процесса сервиса вы заинтересованы в, например, для обслуживания 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 представляется смещением часового пояса в минутах.

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, что означает, что команда будет недоступна.