2009-08-31 2 views
8

Я хотел бы получить доступ к информации о версии сборки службы, которую я «контролирую» с помощью класса ServiceController. (т. е. я бы хотел отобразить «2.3.1.23»), однако я не могу найти никакой информации о получении версий сборки. Возможно ли это вообще?Программно получение версии сборки запущенной службы

EDIT: Просто уточнить ... Я знаю только имя службы, запущенной на локальном компьютере. Я хочу получить доступ к «FileVersionInfo» этой службы (лучше сказал exe службы), однако я не знаю, где находится этот сервис exe.

ответ

10

Если я вас правильно понял, вы хотите, чтобы получить версию любого сервиса ехе. Предполагая, что вы знаете имя и путь к исполняемому файлу сервис, вы можете попробовать:

FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(<path and name of service exe>); 

Вы можете использовать свойство FileVersionInfo класса, чтобы показать номер версии. Обратите внимание, что это также работает для UNC-путей, если у вас есть разрешения на чтение файла.

EDIT
Чтобы получить путь к исполняемому файлу и имя, если вы знаете только имя службы, вы можете получить доступ к реестру при HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. Найдите ключ, соответствующий имени службы. Под этим ключом есть имя значения ImagePath, которое содержит имя и путь исполняемого файла.

+0

Да, вы правильно поняли, и это будет законно работать, однако я не знаю, где находится служба exe ... Я знаю только имя, которое передается конструктору класса ServiceController. –

+0

Отредактировал мой ответ, чтобы показать вам, как получить исполняемый файл для службы. –

+0

+1 Спасибо, это тоже помогло! –

3

Попробуйте это:

System.Reflection.Assembly.GetAssembly(typeof(ServiceController)).GetName().Version 
+3

Я думаю, что OP не хочет видеть версию сборки .NET, которая реализует класс ServiceController, но информацию о версии для некоторого exe-файла ... –

0
Assembly runningAssembly = Assembly.GetEntryAssembly(); 
if (runningAssembly == null) 
{ 
    runningAssembly = Assembly.GetExecutingAssembly(); 
} 
runningAssembly.GetName().Version; 

Используйте этот код внутри вас.

+0

Извините, я думал, что вы хотите получить версию сборки из кода внутри запущенного сервиса. – softveda

Смежные вопросы