2009-08-31 5 views
8

ServiceControllerクラスを使用して「制御する」サービスのアセンブリバージョン情報にアクセスしたいとします。 (つまり、 "2.3.1.23"を表示したいと思いますが)アセンブリのバージョンを取得するための情報は見つかりません...それはまったく可能ですか?実行中のサービスのアセンブリバージョンをプログラムで取得する

EDIT:わかりやすく...私は、ローカルコンピュータで実行されているサービスの名前しか知りません。私はそのサービスの "FileVersionInfo"にアクセスしたい(より良いと言って、サービスexe)が、私はそのサービスexeがどこにあるのか分からない。

答えて

10

は、あなたが任意のサービスexeファイルのバージョンを取得したいです。あなたがしようとする場合があります、あなたは、サービスの実行可能ファイルの名前とパスを知っていると仮定すると:

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がServiceControllerクラスを実装している.NETアセンブリのバージョンを見たくないと思っていますが、いくつかのexeファイルのバージョン情報は... –

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

サービス内でこのコードを使用してください。

+0

申し訳ありませんが、実行中のサービス内のコードからアセンブリバージョンを取得したいと思っていました。 – softveda