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