cs
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
try
{
var installedApps = new List<string>();
string[] registryPaths = new string[]
{
@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
};
RegistryKey[] rootKeys = new RegistryKey[]
{
Registry.LocalMachine,
Registry.CurrentUser
};
foreach (var root in rootKeys)
{
foreach (var path in registryPaths)
{
using (RegistryKey key = root.OpenSubKey(path))
{
if (key == null) continue;
foreach (var subkeyName in key.GetSubKeyNames())
{
using (RegistryKey subkey = key.OpenSubKey(subkeyName))
{
if (subkey == null) continue;
string displayName = subkey.GetValue("DisplayName") as string;
string displayVersion = subkey.GetValue("DisplayVersion") as string;
string publisher = subkey.GetValue("Publisher") as string;
string installLocation = subkey.GetValue("InstallLocation") as string;
string installSource = subkey.GetValue("InstallSource") as string;
string uninstallString = subkey.GetValue("UninstallString") as string;
if (!string.IsNullOrEmpty(displayName))
{
installedApps.Add($"{displayName} 版本: {displayVersion ?? "未知"} 发布者: {publisher ?? "未知"}");
//优先用 InstallLocation,没有再用 InstallSource,再没有用 UninstallString
string pathInfo = !string.IsNullOrEmpty(installLocation) ? installLocation
: !string.IsNullOrEmpty(installSource) ? installSource
: (!string.IsNullOrEmpty(uninstallString) ? uninstallString : "路径未知");
installedApps.Add($"安装路径: {pathInfo}");
installedApps.Add("");
}
}
}
}
}
}
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
string outputFile = Path.Combine(desktopPath, "InstalledAppsList.txt");
File.WriteAllLines(outputFile, installedApps);
Console.WriteLine($"扫描完成,已保存到:{outputFile}");
}
catch (Exception ex)
{
Console.WriteLine("发生异常:" + ex.Message);
}
Console.WriteLine("按任意键退出...");
Console.ReadKey();
}
}
}