Hi,
I am using below code to get all the windows services in a server. I want to know the details of Domain\User, windows service is logged in with. How can achive this.
ServiceController[] lFnGetAllServicesInServer(string aStrServer)
{
ServiceController[] lArrObjServiceController = null;
try
{
lArrObjServiceController = ServiceController.GetServices(aStrServer.Trim());
return lArrObjServiceController;
}
catch (Exception ex)
{
return lArrObjServiceController;
}
finally
{
}
}
Please help out
Sreenath GPosted Jun 30, 2011, 1:21 AM
Got solved with this…
ManagementObjectSearcher lObjMSearcher =
new ManagementObjectSearcher(lStrRemotePath
, "select name, startname from Win32_Service where startname like 'DOMAINNAME'");
foreach (ManagementObject lObject in lObjMSearcher.Get())
{
string lStrServiceName = lObject["Name"].ToString();
string lStrDomain = lObject["startname"].ToString();
}
Guest UserPosted Jun 29, 2011, 11:09 AM
using System;
using System.Management;
using System.ServiceProcess;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
ServiceController[] svcs = ServiceController.GetServices();
foreach (ServiceController s in svcs)
{
uint pid = GetProcessIDByServiceDisplayName(s.DisplayName);
string ownerName = pid == 0 ? "UNABLE TO DETERMINE OWNER" : GetProcessOwner((int)pid);
Console.WriteLine(String.Format("Service '{0}' running as {1}", s.DisplayName, ownerName) );
}
Console.ReadLine(); // wait for enter key
}
private static string GetProcessOwner(int processId)
{
string query = "Select * From Win32_Process Where ProcessID = " + processId;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processList = searcher.Get();
foreach (ManagementObject obj in processList)
{
string[] argList = new string[] { string.Empty };
int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));
if (returnVal == 0)
return argList[0];
}
return "NO OWNER";
}
private static uint GetProcessIDByServiceDisplayName(string serviceDisplayName)
{
uint processId = 0;
string qry = "SELECT PROCESSID FROM WIN32_SERVICE WHERE DISPLAYNAME = '" + serviceDisplayName + "'";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(qry);
foreach (ManagementObject mngntObj in searcher.Get())
{
if (mngntObj["PROCESSID"] != null)
{
processId = (uint) mngntObj["PROCESSID"];
}
else
{
processId = 0;
}
}
return processId;
}
}
}
Suthish NairPosted Jun 29, 2011, 9:35 AM
Console.WriteLine(Environment.MachineName);
Console.WriteLine(Environment.OSVersion);
Console.WriteLine(Environment.UserDomainName);
Console.WriteLine(Environment.UserInteractive);
Console.WriteLine(Environment.UserName);
Console.WriteLine(Environment.Version);