private void treeViewDependents_AfterExpand(object sender, TreeViewEventArgs e) { TreeNode node = e.Node; if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows) { if (node != null && node.Nodes.Count == 0) { TreeNode[] dependentServices = ServiceManagerWindowsWrapper.WMIGetDependentServices(node.Tag as string); if (dependentServices != null && dependentServices.Length > 0) { node.Nodes.AddRange(dependentServices); } } } else { string[] sServicedepencies = ServiceManagerInteropWrapper.ApiLwSmEnumerateServices(); if (sServicedepencies != null) { foreach (string name in sServicedepencies) { IntPtr pHandle = ServiceManagerInteropWrapper.ApiLwSmAcquireServiceHandle(name); if (pHandle != IntPtr.Zero) { ServiceManagerApi.LW_SERVICE_INFO serviceInfo = ServiceManagerInteropWrapper.ApiLwSmQueryServiceInfo(pHandle); if (serviceInfo.ppwszDependencies != null && serviceInfo.ppwszDependencies.Length != 0) { foreach (string service in serviceInfo.ppwszDependencies) { if ((node.Tag as string).Equals(service, StringComparison.InvariantCultureIgnoreCase)) { node.Nodes.Add(service); } } } ServiceManagerInteropWrapper.ApiLwSmReleaseServiceHandle(pHandle); } } } } }
public override void Refresh() { base.Refresh(); if (plugin == null) { plugin = pi as ServiceManagerPlugin; } this.lblCaption.Text = plugin.GetPlugInNode().Text; if (plugin.IsConnectionSuccess) { if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows) { if (!plugin.Do_LogonSCManager()) { Logger.Log("Service Control Manager.Refresh(): Failed to authenticate the specified user"); return; } } } else { return; } if (treeNode.Nodes.Count == 0 || treeNode.IsModified) { if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows) { Dictionary <string, string[]> services = ServiceManagerWindowsWrapper.EnumManagementServices(); if (services != null && services.Count != 0) { foreach (string name in services.Keys) { ListViewItem lvItem = new ListViewItem(services[name]); lvItem.Tag = name; lvService.Items.Add(lvItem); } } } else { string[] sServiceEnum = ServiceManagerInteropWrapper.ApiLwSmEnumerateServices(); if (sServiceEnum != null) { foreach (string name in sServiceEnum) { string serviceState = string.Empty; IntPtr pHandle = ServiceManagerInteropWrapper.ApiLwSmAcquireServiceHandle(name); if (pHandle != IntPtr.Zero) { ServiceManagerApi.LW_SERVICE_INFO serviceInfo = ServiceManagerInteropWrapper.ApiLwSmQueryServiceInfo(pHandle); ServiceManagerApi.LW_SERVICE_STATUS serviceStatus = ServiceManagerInteropWrapper.ApiLwSmQueryServiceStatus(pHandle); switch (serviceStatus.state) { case ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_DEAD: serviceState = "Dead"; break; case ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_PAUSED: serviceState = "Paused"; break; case ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_RUNNING: serviceState = "Running"; break; case ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_STARTING: serviceState = "Starting"; break; case ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_STOPPED: serviceState = "Stopped"; break; case ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_STOPPING: serviceState = "Stopping"; break; } ListViewItem lvItem = new ListViewItem(new string[] { name, serviceInfo.pwszDescription, serviceState, (serviceInfo.bAutostart)?"Automatic": "Manual", "root" }); lvItem.Tag = name; lvService.Items.Add(lvItem); ServiceManagerInteropWrapper.ApiLwSmReleaseServiceHandle(pHandle); } } } } } lvService.Columns[lvService.Columns.Count - 1].Width = 200; }
private void GetUnixServiceDependencies() { IntPtr pServiceHandle = ServiceManagerInteropWrapper.ApiLwSmAcquireServiceHandle(serviceName); if (pServiceHandle == IntPtr.Zero) { return; } //Counting of Dependencies ServiceManagerApi.LW_SERVICE_INFO serviceInfo = ServiceManagerInteropWrapper.ApiLwSmQueryServiceInfo(pServiceHandle); if (serviceInfo.ppwszDependencies != null && serviceInfo.ppwszDependencies.Length != 0) { TreeNode[] servicelist = new TreeNode[serviceInfo.ppwszDependencies.Length]; for (int idx = 0; idx < serviceInfo.ppwszDependencies.Length; idx++) { TreeNode tn = new TreeNode(serviceInfo.ppwszDependencies[idx]); tn.Tag = serviceInfo.pwszName; servicelist[idx] = tn; } if (servicelist != null && servicelist.Length != 0) { treeViewDependencies.Nodes.AddRange(servicelist); } else { treeViewDependencies.Nodes.Add(new TreeNode("<No Dependencies>")); } } ServiceManagerInteropWrapper.ApiLwSmReleaseServiceHandle(pServiceHandle); //Counting of Dependents List <TreeNode> dependentservices = new List <TreeNode>(); string[] sServiceEnum = ServiceManagerInteropWrapper.ApiLwSmEnumerateServices(); if (sServiceEnum != null) { foreach (string name in sServiceEnum) { IntPtr pHandle = ServiceManagerInteropWrapper.ApiLwSmAcquireServiceHandle(name); if (pHandle != IntPtr.Zero) { serviceInfo = ServiceManagerInteropWrapper.ApiLwSmQueryServiceInfo(pHandle); if (serviceInfo.ppwszDependencies != null && serviceInfo.ppwszDependencies.Length != 0) { foreach (string service in serviceInfo.ppwszDependencies) { if (serviceName.Equals(service, StringComparison.InvariantCultureIgnoreCase)) { TreeNode tn = new TreeNode(name); tn.Tag = name; dependentservices.Add(tn); break; } } } ServiceManagerInteropWrapper.ApiLwSmReleaseServiceHandle(pHandle); } } if (dependentservices.Count != 0) { TreeNode[] services = new TreeNode[dependentservices.Count]; dependentservices.CopyTo(services); treeViewDependents.Nodes.AddRange(services); } else { treeViewDependents.Nodes.Add(new TreeNode("<No Dependencies>")); } } }