所有Windows服务目前我正在试图查询所有已安装的Windows服务从(远程)机器。 我看了一下win32.Advapi32
。查询与JNA
但是在这里我只能“定义”(我必须给出一个“ServiceName”)Windows服务。 (Advapi32.INSTANCE.OpenSCManager,Advapi32.INSTANCE.OpenService,Advapi32.INSTANCE.QueryServiceStatusEx)
你知道它允许查询所有Windows服务从(远程)机器的任何API?
编辑://
我用下面的代码试了一下。但它几乎没有错误信息而中止!
public void getService(){
IntByReference size = new IntByReference();
IntByReference lppcbBytesneeded = new IntByReference();
IntByReference retz = new IntByReference();
SC_HANDLE scm = Advapi32.INSTANCE.OpenSCManager(null, null, Winsvc.SC_MANAGER_ENUMERATE_SERVICE);
boolean ret = CustomAdvapi32.INSTANCE.EnumServicesStatusEx(scm, 0, 0x00000030, 0x0000000, null, lppcbBytesneeded,
retz, size, null);
//CustomAdvapi32.INSTANCE.EnumServicesStatusEx(hSCManager, InfoLevel, dwServiceType, dwServiceState,
//cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, pstzGroupName)
int error = Native.getLastError();
Memory buf = new Memory(lppcbBytesneeded.getValue());
size.setValue(retz.getValue());
ret = CustomAdvapi32.INSTANCE.EnumServicesStatusEx(scm, 0, 0x00000030, 0x0000000,
buf, lppcbBytesneeded, retz, size, null);
error = Native.getLastError();
ENUM_SERVICE_STATUS_PROCESS serviceInfo = new ENUM_SERVICE_STATUS_PROCESS(buf);
Structure[] serviceInfos = serviceInfo.toArray(retz.getValue());
for(int i = 0; i < retz.getValue(); i++) {
serviceInfo = (ENUM_SERVICE_STATUS_PROCESS) serviceInfos[i];
System.out.println(serviceInfo.lpDisplayName + "/" + serviceInfo.lpServiceName);
}
}
显然['sc'命令可以做到这一点](http://www.randomsupport.com/rs/blogs/index.php?title=howto_remotely_query_windows_service_inf&more=1&c=1&tb=1&pb=1),我会假设它使用SCManager功能来完成。 – technomage
嗨,谢谢。但是1.我不能/不会调用“第三方”工具并阅读流。 2.嗯,我没有发现任何关于这个工具调用的apis的信息。问题是:该工具调用哪个API来查询所有安装的Windows服务?但是,到目前为止感谢 –
它看起来像['EnumServicesStatusEx'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms682640(v = vs.85).aspx)是你想要的。 – technomage