Программное получение версии сборки запущенной службы

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

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


person David Božjak    schedule 31.08.2009    source источник


Ответы (3)


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

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

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

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

person Thorsten Dittmar    schedule 31.08.2009
comment
Да, вы правильно поняли, и это, безусловно, сработает, однако я не знаю, где находится сервисный exe ... Я знаю только имя, которое передается конструктору класса ServiceController. - person David Božjak; 31.08.2009
comment
Отредактировал мой ответ, чтобы показать вам, как получить исполняемый файл для службы. - person Thorsten Dittmar; 31.08.2009

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

System.Reflection.Assembly.GetAssembly(typeof(ServiceController)).GetName().Version
person Andrew Hare    schedule 31.08.2009
comment
Я думаю, что OP не хочет видеть версию сборки .NET, которая реализует класс ServiceController, но информацию о версии для какого-то исполняемого файла... - person Thorsten Dittmar; 31.08.2009

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

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

person softveda    schedule 31.08.2009
comment
Извините, я думал, вы хотите получить версию сборки из кода работающей службы. - person softveda; 01.09.2009