public static ServiceManagerApi.LW_SERVICE_INFO ApiLwSmQueryServiceInfo(IntPtr phServiceHandle) { ServiceManagerApi.LW_SERVICE_INFO serviceInfo = new ServiceManagerApi.LW_SERVICE_INFO(); IntPtr serviceInfoPtr = IntPtr.Zero; try { Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo()", Logger.ServiceManagerLoglevel); int iRet = ServiceManagerInterop.LwSmQueryServiceInfo(phServiceHandle, out serviceInfoPtr); if (iRet != 0) { Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo returns" + iRet.ToString(), Logger.ServiceManagerLoglevel); return(serviceInfo); } Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo is success", Logger.ServiceManagerLoglevel); serviceInfo = ServiceManagerInterop.UnmarshalServiceInfo(serviceInfoPtr); } catch (Exception ex) { Logger.LogException("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo", ex); } return(serviceInfo); }
public static ServiceManagerApi.LW_SERVICE_INFO UnmarshalServiceInfo(IntPtr pNativeData) { _LW_SERVICE_INFO _info = (_LW_SERVICE_INFO)Marshal.PtrToStructure(pNativeData, typeof(_LW_SERVICE_INFO)); ServiceManagerApi.LW_SERVICE_INFO info = new ServiceManagerApi.LW_SERVICE_INFO(); info.type = _info.type; info.pwszName = _info.pwszName; info.pwszPath = _info.pwszPath; info.pwszDescription = _info.pwszDescription; info.bAutostart = _info.bAutostart; info.ppwszArgs = ServiceManagerInterop.UnmarshalStringList(_info.ppwszArgs); info.ppwszDependencies = ServiceManagerInterop.UnmarshalStringList(_info.ppwszDependencies); return(info); }
public static IntPtr MarshalServiceInfo(object ManagedObj) { ServiceManagerApi.LW_SERVICE_INFO info = (ServiceManagerApi.LW_SERVICE_INFO)ManagedObj; _LW_SERVICE_INFO _info = new _LW_SERVICE_INFO(); IntPtr infoPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(_LW_SERVICE_INFO))); _info.pwszName = info.pwszName; _info.pwszPath = info.pwszPath; _info.pwszDescription = info.pwszDescription; _info.bAutostart = info.bAutostart; _info.ppwszArgs = ServiceManagerInterop.MarshalStringList(info.ppwszArgs); _info.ppwszDependencies = ServiceManagerInterop.MarshalStringList(info.ppwszDependencies); Marshal.StructureToPtr(_info, infoPtr, false); return(infoPtr); }
public static int StartAllServiceDependencies(IntPtr pHandle, ref int iReturn) { try { if (pHandle != IntPtr.Zero) { ServiceManagerApi.LW_SERVICE_INFO serviceInfo = ServiceManagerInteropWrapper.ApiLwSmQueryServiceInfo(pHandle); ServiceManagerApi.LW_SERVICE_STATUS serviceStatus = ServiceManagerInteropWrapper.ApiLwSmQueryServiceStatus(pHandle); if (serviceStatus.state == ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_RUNNING) { Logger.Log("Dependency servcie: " + serviceInfo.pwszName + " running"); return(iReturn); } if (serviceInfo.ppwszDependencies != null && serviceInfo.ppwszDependencies.Length != 0) { foreach (string service in serviceInfo.ppwszDependencies) { Logger.Log("Dependency servcie: " + service); IntPtr pDHandle = ServiceManagerInteropWrapper.ApiLwSmAcquireServiceHandle(service); if (pDHandle != IntPtr.Zero) { ServiceManagerApi.LW_SERVICE_INFO InnerServiceInfo = ServiceManagerInteropWrapper.ApiLwSmQueryServiceInfo(pDHandle); ServiceManagerApi.LW_SERVICE_STATUS Status = ServiceManagerInteropWrapper.ApiLwSmQueryServiceStatus(pDHandle); if (InnerServiceInfo.ppwszDependencies == null || InnerServiceInfo.ppwszDependencies.Length == 0) { if (Status.state != ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_RUNNING) { iReturn = ServiceManagerInteropWrapper.ApiLwSmStartService(pDHandle); if (iReturn != 0) { return(iReturn); } } else { Logger.Log("Dependency servcie: " + service + " running"); } } else { StartAllServiceDependencies(pDHandle, ref iReturn); iReturn = ServiceManagerInteropWrapper.ApiLwSmStartService(pDHandle); } ServiceManagerInteropWrapper.ApiLwSmReleaseServiceHandle(pDHandle); } } iReturn = ServiceManagerInteropWrapper.ApiLwSmStartService(pHandle); } else { if (serviceStatus.state != ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_RUNNING) { iReturn = ServiceManagerInteropWrapper.ApiLwSmStartService(pHandle); } } } } catch (Exception ex) { Logger.LogException("ServiceManagerInteropWrapper:StartAllServiceDependencies", ex); } return(iReturn); }
public static ServiceManagerApi.LW_SERVICE_INFO UnmarshalServiceInfo(IntPtr pNativeData) { _LW_SERVICE_INFO _info = (_LW_SERVICE_INFO) Marshal.PtrToStructure(pNativeData, typeof(_LW_SERVICE_INFO)); ServiceManagerApi.LW_SERVICE_INFO info = new ServiceManagerApi.LW_SERVICE_INFO(); info.type = _info.type; info.pwszName = _info.pwszName; info.pwszPath = _info.pwszPath; info.pwszDescription = _info.pwszDescription; info.bAutostart = _info.bAutostart; info.ppwszArgs = ServiceManagerInterop.UnmarshalStringList(_info.ppwszArgs); info.ppwszDependencies = ServiceManagerInterop.UnmarshalStringList(_info.ppwszDependencies); return info; }
public static ServiceManagerApi.LW_SERVICE_INFO ApiLwSmQueryServiceInfo(IntPtr phServiceHandle) { ServiceManagerApi.LW_SERVICE_INFO serviceInfo = new ServiceManagerApi.LW_SERVICE_INFO(); IntPtr serviceInfoPtr = IntPtr.Zero; try { Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo()", Logger.ServiceManagerLoglevel); int iRet = ServiceManagerInterop.LwSmQueryServiceInfo(phServiceHandle, out serviceInfoPtr); if (iRet != 0) { Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo returns" + iRet.ToString(), Logger.ServiceManagerLoglevel); return serviceInfo; } Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo is success", Logger.ServiceManagerLoglevel); serviceInfo = ServiceManagerInterop.UnmarshalServiceInfo(serviceInfoPtr); } catch (Exception ex) { Logger.LogException("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo", ex); } return serviceInfo; }