我使用它来获取程序名称,但我需要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");
运行该程序。
答案 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;
如果您正在寻找特定的产品,请提供更多详细信息,了解哪些因素将决定您要寻找的产品。使用注册表列出已安装的程序似乎不是您想要做的,所以请更具体。