我想訪問ServiceController類的「控制」服務的程序集版本信息。 (即我想顯示「2.3.1.23」),但是我找不到任何有關檢索程序集版本的信息......是否有可能?以編程方式檢索正在運行的服務的程序集版本
編輯:只是爲了澄清......我只知道在本地計算機上運行的服務的名稱。我想訪問該服務的「FileVersionInfo」(更好地說服務exe),但我不知道該服務exe位於何處。
我想訪問ServiceController類的「控制」服務的程序集版本信息。 (即我想顯示「2.3.1.23」),但是我找不到任何有關檢索程序集版本的信息......是否有可能?以編程方式檢索正在運行的服務的程序集版本
編輯:只是爲了澄清......我只知道在本地計算機上運行的服務的名稱。我想訪問該服務的「FileVersionInfo」(更好地說服務exe),但我不知道該服務exe位於何處。
如果我理解正確的話,你想獲得任何服務exe文件的版本。假設你知道的名稱和服務的可執行文件的路徑,你可能會想嘗試:
FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(<path and name of service exe>);
然後,您可以使用FileVersionInfo
類的屬性,顯示的版本號。請注意,只要您有權讀取文件,這也適用於UNC路徑。
編輯
爲了得到可執行文件路徑和名稱,如果你只知道服務的名稱,你可以HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
下訪問註冊表。搜索與服務名稱匹配的密鑰。在該密鑰下,有一個名稱爲ImagePath
的值,其中包含可執行文件的名稱和路徑。
試試這個:
System.Reflection.Assembly.GetAssembly(typeof(ServiceController)).GetName().Version
我認爲OP不希望看到實現ServiceController類的.NET程序集的版本,但某些exe文件的版本信息... –
Assembly runningAssembly = Assembly.GetEntryAssembly();
if (runningAssembly == null)
{
runningAssembly = Assembly.GetExecutingAssembly();
}
runningAssembly.GetName().Version;
在您的服務中使用此代碼。
對不起,我以爲你想從正在運行的服務中的代碼中獲得程序集版本。 – softveda
是的,你理解正確,這將證明工作,但是我不知道exe文件位於哪裏......我只知道傳遞給ServiceController類構造函數的名稱。 –
編輯我的回覆,告訴你如何獲得服務的可執行文件。 –
+1謝謝,這也幫助了我! –