Может ли кто-нибудь помочь мне Java-код, чтобы получить время начала службы Windows. Как мы используем Process Explorer.Код Java, чтобы получить время начала службы
Скриншоты для активации службы времени запуска с помощью Process Explorer
Может ли кто-нибудь помочь мне Java-код, чтобы получить время начала службы Windows. Как мы используем Process Explorer.Код Java, чтобы получить время начала службы
Скриншоты для активации службы времени запуска с помощью Process Explorer
Это очень 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
представляется смещением часового пояса в минутах.
Вы можете реализовать класс, который может запускать команду Windows для запроса журналов Windows. Это может быть сделано таким образом:
Runtime rt = Runtime.getRuntime();
try {
rt.exec("Your command");
} catch (IOException e) {
e.printStackTrace();
}
Использование WMIC вы сможете найти время начала вы хотите, как указано выше.
К сожалению, sc не сможет предоставить вам такую информацию. Другой способ (не уверен, если он будет работать) заключается в том, чтобы запросить средство просмотра событий окна для зарегистрированного события запуска службы (я думаю, что eventId равен 902). После получения информации вы можете проанализировать строку, чтобы найти информацию о интересующей вас услуге.
Одно слово предупреждения, хотя. Если вы планируете развертывать приложение на старой установке Windows, будьте осторожны, поскольку старые установки Windows (XP и т. Д.) Могут не всегда содержать действительную установку WMIC, что означает, что команда будет недоступна.
Вы можете посмотреть JNA. – user1803551