Получить дату установки из управляемого кода

StackOverflow https://stackoverflow.com/questions/414653

  •  03-07-2019
  •  | 
  •  

Вопрос

Существует ли управляемый API для получения даты установки приложения с использованием GUID продукта?

Спасибо.Скотт

Это было полезно?

Решение

«Правильный» способ получить эту информацию — использовать ::MsiGetProductInfo().PInvoke должен быть тривиальным.

Другие советы

Спасибо, Роб!Ниже я добавил полный пример C#.

    [DllImport("msi.dll", CharSet = CharSet.Unicode)]
    static extern Int32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, ref Int32 len);

    static void Main(string[] args)
    {
        Int32 len = 512;
        var builder = new StringBuilder(len);
        MsiGetProductInfo("{0db93d2f-a9e7-417f-9425-5e61e82c0868}", "InstallDate", builder, ref len);

        var installDate = DateTime.ParseExact(builder.ToString(), "yyyyMMdd", CultureInfo.InvariantCulture);

        Console.WriteLine(installDate);
    }

Я не знаю ни одного API, который бы это сделал, но вы можете попробовать прочитать значение напрямую из реестра.Проверьте следующий ключ:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{product-id}
    InstallDate = 20081004

Информация, хранящаяся под клавишей удаления, отображается, например.в Панели управления -> Установка и удаление программ.

Раздел InstallDate в реестре присутствует не всегда, особенно если программа не была установлена с помощью MSI (как, например Плагин Adobe Flash Player, DAEMON Tools, 7-ZIP, Picasa, TeamViewer, Mozilla Firefox).

Другой «правильный» способ — получить дату создания какого-то файла, который, как вы знаете, «точно» добавлен установщиком.В моем случае это «unins000.exe», который (пере) создан программой установки Inno v5.Никакого PInvoke не требуется, просто используйте свойства FileInfo Exists и CreationTime!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top