以编程方式检索已安装应用程序的版本

问题描述 投票:0回答:5

我想以编程方式检索已安装应用程序(当前正在运行)的版本,其中我有正在运行的进程的名称。如果可能的话,检索安装目录也将不胜感激,但这是可选的。

我搜索了很多地方,有些问题看起来很相似,但他们没有给我我想要的东西。

更具体一点,现在我想为 Visual Studio 执行此操作,即我有一个 WPF 应用程序,它与 Visual Studio 一起运行,并且鉴于我知道 Visual Studio 的进程名称,即“devenv”,我该如何做从 WPF 应用程序获取我的计算机上安装的 Visual Studio 的版本信息?这只是一个示例,不要假设 Visual Studio 有任何特殊情况。在一般情况下,我们会运行一个应用程序,我们知道该应用程序的进程名称并想要其安装的版本。

您能提供执行此操作的 C# 代码吗?

c# visual-studio version
5个回答
5
投票

这会很简单。所有类型的系统相关信息都将出现在注册表中。 (即)如果你打开regedit,你可能会发现各种HKEY。现在,请导航至以下位置。

“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall”

您可以在该位置中找到许多文件夹,其中文件夹的名称将被加密。这些文件夹表示当前计算机中安装的应用程序。

每个文件夹中都会有许多键和数据值对。您可以在其中找到 DisplayName 和 DisplayVersion。因此,此 DisplayVersion 为您提供应用程序的实际版本。

那么,如何通过代码来实现呢?

 RegistryKey rKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");

            List<string> insApplication = new List<string>();

            if (rKey != null && rKey.SubKeyCount > 0)
            {
                insApplication = rKey.GetSubKeyNames().ToList();
            }

            int i = 0;

            string version = "";

            foreach (string appName in insApplication)
            {

                RegistryKey finalKey = rKey.OpenSubKey(insApplication[i]);

                string installedApp = finalKey.GetValue("DisplayName").ToString();

                if (installedApp == "Google Chrome")
                {
                    version = finalKey.GetValue("DisplayVersion").ToString();
                    return;
                }
                i++;
            }

2
投票
Process.GetProcessesByName("DevEnv")[0].Modules[0].FileVersionInfo

0
投票
Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

这获取执行程序集的版本。


0
投票
Imports EnvDTE    
Imports EnvDTE80    
Imports EnvDTE90

Public DTE As EnvDTE.DTE
Dim version As String

DTE = System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.9.0")    
version = DTE.Version    
MsgBox("The visual studio version is {0}", version)

0
投票

我发现的唯一方法(不仅适用于 Windows)是:

  • 使用参数
    -version
    或类似的参数在新进程中运行应用程序(以编程方式运行此进程),
  • 重新定位此进程的输出 - !和错误流(“在 OSX 应用程序上,对版本号查询的响应可以发送到错误流)
  • 并解析输出以获取版本号
© www.soinside.com 2019 - 2024. All rights reserved.