答案 0 :(得分:0)
这是特定于Windows的,因此Java或其库中没有内置任何内容。一种可能的方法是使用两个外部命令sc
和wmic
来提取此信息。
使用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安装,这意味着该命令将不可用。