我想以编程方式检索已安装应用程序(当前正在运行)的版本,其中我有正在运行的进程的名称。如果可能的话,检索安装目录也将不胜感激,但这是可选的。
我搜索了很多地方,有些问题看起来很相似,但他们没有给我我想要的东西。
更具体一点,现在我想为 Visual Studio 执行此操作,即我有一个 WPF 应用程序,它与 Visual Studio 一起运行,并且鉴于我知道 Visual Studio 的进程名称,即“devenv”,我该如何做从 WPF 应用程序获取我的计算机上安装的 Visual Studio 的版本信息?这只是一个示例,不要假设 Visual Studio 有任何特殊情况。在一般情况下,我们会运行一个应用程序,我们知道该应用程序的进程名称并想要其安装的版本。
您能提供执行此操作的 C# 代码吗?
这会很简单。所有类型的系统相关信息都将出现在注册表中。 (即)如果你打开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++;
}
Process.GetProcessesByName("DevEnv")[0].Modules[0].FileVersionInfo
Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
这获取执行程序集的版本。
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)
我发现的唯一方法(不仅适用于 Windows)是:
-version
或类似的参数在新进程中运行应用程序(以编程方式运行此进程),