-
Автор темы
- #1
Знакомый попросил помочь ему с поиском директории стима для его установщика на C#. Получилось не совсем, что он хотел, но код интересный, поэтому решил с вами им поделиться. Программа пробегается по основным ветвям реестра и ищет в
В случае отсутствия ключа с необходимым
Исходный код:
Код был взят из свободного доступа и немного переработан под наличие ключа
Uninstall
программу с нужным вам именем. Если вы сможете получить доступ ко всей ветви LocalMachine
, то сможете искать установленные приложения и на других дисках, прошу поделиться этим кодом, если у вас получится.В случае отсутствия ключа с необходимым
DisplayName
, метод GetApplictionInstallPath
вернет "Не найдено".Исходный код:
C#:
using System;
using Microsoft.Win32;
namespace Finder
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetApplictionInstallPath(Console.ReadLine()));
Console.ReadKey();
}
public static string GetApplictionInstallPath(string nameOfAppToFind)
{
RegistryKey registryKey;
string keyName, install = null, uninstall = null;
keyName = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
registryKey = ExistsInSubKey(Registry.CurrentUser, keyName, "DisplayName", nameOfAppToFind);
if (registryKey != null)
{
try
{
install = registryKey.GetValue("InstallLocation") as string;
uninstall = registryKey.GetValue("UninstallString") as string;
}
catch { }
if (!String.IsNullOrEmpty(install))
return install;
else if (!String.IsNullOrEmpty(uninstall))
return uninstall;
}
keyName = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
registryKey = ExistsInSubKey(Registry.LocalMachine, keyName, "DisplayName", nameOfAppToFind);
if (registryKey != null)
{
try
{
install = registryKey.GetValue("InstallLocation") as string;
uninstall = registryKey.GetValue("UninstallString") as string;
}
catch { }
if (!String.IsNullOrEmpty(install))
return install;
else if (!String.IsNullOrEmpty(uninstall))
return uninstall;
}
keyName = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
registryKey = ExistsInSubKey(Registry.LocalMachine, keyName, "DisplayName", nameOfAppToFind);
if (registryKey != null)
{
try
{
install = registryKey.GetValue("InstallLocation") as string;
uninstall = registryKey.GetValue("UninstallString") as string;
}
catch { }
if (!String.IsNullOrEmpty(install))
return install;
else if (!String.IsNullOrEmpty(uninstall))
return uninstall;
}
return "Не найдено";
}
private static RegistryKey ExistsInSubKey(RegistryKey root, string subKeyName, string attributeName, string nameOfAppToFind)
{
RegistryKey subkey;
string displayName;
RegistryKey key = root.OpenSubKey(subKeyName);
if (key != null)
{
foreach (string kn in key.GetSubKeyNames())
{
subkey = key.OpenSubKey(kn);
displayName = subkey.GetValue(attributeName) as string;
if (nameOfAppToFind.Equals(displayName))
return subkey;
}
}
return null;
}
}
}
UninstallString
.