Get install data do código gerenciado
-
03-07-2019 - |
Pergunta
Existe uma API conseguiu recuperar um aplicativo de instalar data usando o GUID do produto?
Graças. Scott
Solução
A forma "adequada" para chegar a essas informações é usar :: MsiGetProductInfo (). PInvoke deve ser trivial.
Outras dicas
Graças Rob! Eu adicionei um exemplo completo C # abaixo.
[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);
}
Eu não sei sobre qualquer API que vai fazer isso, mas você pode tentar ler o valor do Registro diretamente. Verifique a seguinte chave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{product-id}
InstallDate = 20081004
As informações armazenadas na chave Uninstall é exibido por exemplo no Painel de Controle -> Adicionar ou Remover Programas.
A chave InstallDate no Registro não está sempre lá, especialmente quando o programa não foi instalado com através MSI (como, por exemplo, Adobe Flash Player Plugin, DAEMON Tools, 7-ZIP, Picasa, TeamViewer, Mozilla Firefox ).
Outra forma "adequada" é obter a data de criação de algum arquivo que você sabe para "certeza" é adicionado pelo instalador. No meu caso é "unins000.exe" que é (re) criado por Inno v5 configuração. Sem PInvoke envolvido, mas simplesmente usar FileInfo do Exists e propriedades CreationTime!