以编程方式检索正在运行的服务的程序集版本

时间:2009-08-31 12:38:59

标签: c# assemblies version

我想使用ServiceController类访问我“控制”的服务的程序集版本信息。 (即我想显示“2.3.1.23”),但我找不到任何有关检索装配版本的信息......是否可以使用?

编辑:只是为了澄清......我只知道本地计算机上运行的服务的名称。我想访问该服务的“FileVersionInfo”(更好的说服务exe),但我不知道服务exe位于何处。

3 个答案:

答案 0 :(得分:11)

如果我理解正确,您希望获得任何服务exe的版本。假设您知道服务可执行文件的名称和路径,您可能想尝试:

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

然后,您可以使用FileVersionInfo类的属性来显示版本号。请注意,只要您具有读取文件的权限,这也适用于UNC路径。

修改
要获取可执行路径和名称(如果您只知道服务名称),可以访问HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下的注册表。搜索与服务名称匹配的密钥。在该键下,有一个值名ImagePath,其中包含可执行文件的名称和路径。

答案 1 :(得分:3)

试试这个:

System.Reflection.Assembly.GetAssembly(typeof(ServiceController)).GetName().Version

答案 2 :(得分:1)

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

在您的服务中使用此代码。