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

我用它来获取程序名称,但我需要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"); 

运行程序。

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

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

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

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

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

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

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