Как найти местоположение программы в реестре, если я знаю MSI GUID? - PullRequest
9 голосов
/ 13 августа 2010

Я установил MSI с GUID (0733556C-37E8-4123-A801-D3E6C5151617). Программа, зарегистрированная в реестре: HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ ()

Значение UninstallString = MsiExec.exe / I (0733556C-37E8-4123-A801-D3E6C5151617)

Мой вопрос: как утилита MsiExec.exe знает имя и путь к файлу, который вы хотите запустить при удалении программ? Где в реестре эту информацию можно найти?

Ответы [ 7 ]

13 голосов
/ 13 августа 2010

Windows сохраняет информацию о конфигурации установщика Windows скрытой и зашифрованной в реестре.Он не доступен для просмотра человеческим глазом, как и другие части реестра.

Для запроса / изменения / удаления этой информации вам необходимо использовать функции MSI.
( Справочник по функциям установщика)

Для вашего конкретного вопроса попробуйте функцию MsiGetProductInfo .

8 голосов
/ 26 июля 2013

Вот простая программа на c #, которая использует MsiGetProductInfo, как говорит Уильям Леара, чтобы получить фактическое местоположение кэшированного установщика на диске.

class Program
{
    static void Main(string[] args)
    {
        Int32 len = 512;
        System.Text.StringBuilder builder = new System.Text.StringBuilder(len);
        MsiGetProductInfo("{89C098E5-C108-49F9-9B1D-10503C6D8A05}", "LocalPackage", builder, ref len);
        Console.WriteLine(builder.ToString());
        Console.ReadLine();
    }

    [DllImport("msi.dll", CharSet = CharSet.Unicode)]
    static extern Int32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, ref Int32 len); 
}
7 голосов
/ 09 мая 2011

Вы можете попробовать из командной строки:

wmic product where "Name like '%your software here%'" get Name, Version, PackageCode
1 голос
/ 10 октября 2017

Предпосылка этого вопроса вводит в заблуждение, потому что UninstallString в реестре не используется при удалении.Идите вперед и измените строку, чтобы проверить это - она ​​не будет использовать вашу измененную строку.

Хотя ссылки на содержимое в реестре могут быть привлекательными, краткий ответ заключается в том, что данные установщика Windows в реестре являются подробностями реализации.В основном вопрос заключается в том, как работает MsiConfigureProduct (.... INSTALLSTATE_ABSENT ...), и нет смысла гадать о деталях реализации и о том, где она может быть в реестре.Это API все время вниз.Возможно, это была реальная задача, которую плакат, возможно, хотел выполнить, но она замаскирована вопросом, как работают деинсталляции.

1 голос
/ 06 октября 2017

Вам не нужно никакого программного обеспечения. Это работает в Windows 10, и я думаю, что это справедливо и для Windows 7.

Если ваш код продукта 0733556C-37E8-4123-A801-D3E6C5151617. Попробуйте найти ключ C65533708E7332148A103D6E5C516171 (в основном он перевернут), как только вы его найдете, найдите подраздел InstallProperties, если его не существует, попробуйте найти другой результат. Найдя InstallProperties, откройте и найдите ключ LocalPackage. И затем у вас есть путь к MSI-пакету, который MSI сохраняет как Cache при установке приложения.

1 голос
/ 05 июня 2012

Существует бесплатная утилита от Tarma Software Research, которая мне показалась полезной для этого. Получите это от их веб-сайта .

0 голосов
/ 13 августа 2010

Этот ключ отображается на HKEY_CLASSES_ROOT\Installer\Products\.

...