Программно получить версию сборки работающей службы - PullRequest
10 голосов
/ 31 августа 2009

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

РЕДАКТИРОВАТЬ : Просто чтобы уточнить ... Я знаю только название службы, работающей на локальном компьютере. Я хочу получить доступ к «FileVersionInfo» этой службы (лучше сказать exe службы), однако я не знаю, где находится эта exe службы.

Ответы [ 3 ]

11 голосов
/ 31 августа 2009

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

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

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

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

3 голосов
/ 31 августа 2009

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

System.Reflection.Assembly.GetAssembly(typeof(ServiceController)).GetName().Version
1 голос
/ 31 августа 2009
 Assembly runningAssembly = Assembly.GetEntryAssembly();
 if (runningAssembly == null)
 {
    runningAssembly = Assembly.GetExecutingAssembly();
 }
runningAssembly.GetName().Version;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...