Как найти исполняемый путь службы Windows - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь найти исполняемый путь работающей службы, и я посмотрел на ServiceBase, и нет никакого свойства, указывающего путь.Также ServiceController offer any kind of help.

ServiceBase []services=ServiceController.GetServices();
IEnumerable<string> paths=services.Select(x=> x. ? );

Я также пытался использовать команду sc qc cmd, но, похоже, она не работает для определенной службы

            Process proc = new Process();
            var info = new ProcessStartInfo();
            info.FileName = "cmd.exe";
            info.Arguments = "sc qc \"[service-name]\" | find \"BINARY_PATH_NAME\"";
            proc.StartInfo = info;
            proc.Start();
            var data = await proc.StandardOutput.ReadToEndAsync();

Выдает ошибку:

System.InvalidOperationException: 'StandardOut не был перенаправлен или процесс еще не запущен.'

Есть ли способ получить путь к исполняемому файлу дляконкретный сервис или все они?

1 Ответ

1 голос
/ 11 июля 2019

Вы можете использовать WMI

Например (с WMI Code Creator ):

            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Service");
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("DisplayName: {0}", queryObj["DisplayName"]);
                    Console.WriteLine("Name: {0}", queryObj["Name"]);
                    Console.WriteLine("PathName: {0}", queryObj["PathName"]);
                    Console.WriteLine("ProcessId: {0}", queryObj["ProcessId"]);
                    Console.WriteLine("-----------------------------------");
                }
            }
            catch (ManagementException me)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + me.Message);
            }
...