2009-08-31 48 views
8

我想訪問ServiceController類的「控制」服務的程序集版本信息。 (即我想顯示「2.3.1.23」),但是我找不到任何有關檢索程序集版本的信息......是否有可能?以編程方式檢索正在運行的服務的程序集版本

編輯:只是爲了澄清......我只知道在本地計算機上運行的服務的名稱。我想訪問該服務的「FileVersionInfo」(更好地說服務exe),但我不知道該服務exe位於何處。

回答

10

如果我理解正確的話,你想獲得任何服務exe文件的版本。假設你知道的名稱和服務的可執行文件的路徑,你可能會想嘗試:

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

然後,您可以使用FileVersionInfo類的屬性,顯示的版本號。請注意,只要您有權讀取文件,這也適用於UNC路徑。

編輯
爲了得到可執行文件路徑和名稱,如果你只知道服務的名稱,你可以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

相關問題