在C#中获取已安装程序的exe名称?

时间:2012-07-04 04:59:29

标签: c# winforms registry visual-c#-express-2010

我使用它来获取程序名称,但我需要exe名称。我如何找到它们?

string SoftwareKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products";
RegistryKey rk = default(RegistryKey);
rk = Registry.LocalMachine.OpenSubKey(SoftwareKey);
//string skname = null;
string sname = string.Empty;

foreach (string skname in rk.GetSubKeyNames())
{

  try
    {
       sname = Registry.LocalMachine.OpenSubKey(SoftwareKey).OpenSubKey(skname).OpenSubKey("InstallProperties").GetValue("DisplayName").ToString();
       listBox1.Items.Add(sname);
     }
     catch (Exception ex)
     {
        MessageBox.Show(ex.Message);
     }
}

我正在尝试这样做:

System.Diagnostics.Process.Start("Name.exe");

运行该程序。

3 个答案:

答案 0 :(得分:0)

安装程序没有,实际上也不知道实际的可执行文件。它只知道安装包 - .MSI文件。

为了获取可执行文件的名称(是的,许多“程序”由许多.EXE文件组成),您需要查询.MSI文件。

答案 1 :(得分:0)

在Windows中,程序通常由msi文件安装,并且单个程序包可以安装多个exe。确实有时程序是由setup.exe安装的,但它们只是一个提取真实msi文件的包装器。

某些供应商(如InstallShield)可能会将setup.exe存储在本地硬盘中的某处,以防用户需要再次启动setup.exe以进行修改\卸载。但是,这是特定于供应商的实现。

答案 2 :(得分:0)

缺乏对细节的澄清,您可以在本地驱动器上获取.exe:

var allExePaths =
    from drive in Environment.GetLogicalDrives()
    from exePath in Directory.GetFiles(drive, "*.exe", SearchOption.AllDirectories)
    select exePath;

如果您正在寻找特定的产品,请提供更多详细信息,了解哪些因素将决定您要寻找的产品。使用注册表列出已安装的程序似乎不是您想要做的,所以请更具体。