Как получить версию установленного приложения из реестра? - PullRequest
1 голос
/ 07 января 2011

Я хочу получить номера версий программного обеспечения, установленного на моем компьютере ... возможно ли использовать класс Registry в C #?

     RegistryKey regKey;

    public void ReadReg()
    {
        regKey = Registry.LocalMachine;
        RegistryKey sk= regKey.OpenSubKey("SOFTWARE\\");
        string[] subKeys = sk.GetSubKeyNames();

        foreach (string  sub in subKeys)
        {
            Console.WriteLine(sub);
        }            
    }

Ответы [ 4 ]

3 голосов
/ 07 января 2011

Нет стандартного и общедоступного места, где установщики хранят информацию о продукте. Однако база данных установщика содержит эту информацию (где продукты используют MSI - прямо или косвенно), и эта информация доступна через WMI.

WMI также можно использовать из .NET с типами System.Management. Запрос:

select name,version from Win32_Product

Адаптация образца здесь к этому запросу не должна быть слишком сложной.

1 голос
/ 16 ноября 2013

Нет гарантии, что вы найдете информацию о версии программы в реестре.Я использую ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\programname, чтобы найти полный путь, но это все еще зависит от программы установки / установки, чтобы установить это значение.Если было достаточно хорошо использовать это соглашение, вы можете использовать полный путь для вызова GetFileVersionInfo(...).

. Разработчик должен заполнить полезную информацию о ресурсах, такую ​​как версия, название компании, описание, авторские права,и т.д. ... Вы можете сказать, что некоторые программы имеют старые заполнители по умолчанию "To Do" в ресурсе.Другие, даже Microsoft, забудут включить название компании в ресурс для таких программ, как Dumprep.Другие Exe, созданные без Visual Studio, не удосуживаются включать любой сегмент ресурса, к которому может получить доступ GetFileVersionInfo().

В конце концов, я нашел эту функцию наиболее надежной.Также обратите внимание, прежде чем звонить GetFileVersionInfo(), убедитесь, что вы звоните GetFileVersionSize().Если это x64 версия Windows, в некоторых случаях вам может потребоваться вызвать Wow64DisableWow64FsRedirection(...) & Wow64RevertWow64FsRedirection(...) или использовать SysNative, если программа, которую вы просматриваете, находится в системной папке, которая перенаправлена.

1 голос
/ 07 января 2011

А какой ключ вы собираетесь посмотреть, и как вы определяете, что это номер версии?Нет никаких гарантий, поскольку он будет меняться от поставщика к поставщику.

Альтернативой может быть перечисление исполняемых файлов на вашем компьютере (например, в C:\Program Files\ и его подпапках) и использование FileVersionInfo для извлечения информации о версиииз самого исполняемого файла:

FileVersionInfo fi = FileVersionInfo.GetVersionInfo("yourexe.exe");
0 голосов
/ 07 января 2011

Вы можете получить версию как -

string version = sk.GetValue("Version");

Если ключ версии доступен, он вернет значение, иначе он вернет ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...