3

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

运行程序。

4

3 回答 3

0

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

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

于 2012-07-04T05:06:20.237 回答
0

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

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

于 2012-07-04T05:09:21.687 回答
0

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

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

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

于 2012-07-04T07:37:44.643 回答