代码之家  ›  专栏  ›  技术社区  ›  David Božjak

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

  •  9
  • David Božjak  · 技术社区  · 15 年前

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

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

    3 回复  |  直到 15 年前
        1
  •  11
  •   Thorsten Dittmar    15 年前

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

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

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

    编辑
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services . 搜索与服务名称匹配的密钥。在该键下,有一个值名 ImagePath

        2
  •  3
  •   Andrew Hare    15 年前

    试试这个:

    System.Reflection.Assembly.GetAssembly(typeof(ServiceController)).GetName().Version
    
        3
  •  2
  •   softveda    15 年前
     Assembly runningAssembly = Assembly.GetEntryAssembly();
     if (runningAssembly == null)
     {
        runningAssembly = Assembly.GetExecutingAssembly();
     }
    runningAssembly.GetName().Version;
    

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