Como ler os atalhos do instalador com C# (WPF)
-
19-09-2019 - |
Pergunta
Fundo: Decidi me ensinar C# através do WPF e estou escrevendo um pequeno aplicativo que precisa obter uma lista de atalhos de menu inicial e seus alvos e armazená -los. Basicamente, estou tentando pegar todos os atalhos e colocar os caminhos de seus aplicativos de destino na memória. No entanto, eu me deparei com um problema tentando ler atalhos do Windows Installer (os que apontam para algo como C:\Windows\Installer\{90120000-0030-0000-0000-0000000FF1CE}\wordicon.exe
- O Microsoft Office é um bom exemplo disso). Eu fiz algumas pesquisas e parece que o Windows usa alguma mágica nos bastidores envolvendo o registro para encontrar a localização real do arquivo.
Pergunta: Como posso obter o objetivo real desses atalhos do Windows Installer em C#? Muitas fontes que encontrei me apontam para o IShellLink
Interface, mas não sei como usá -lo com C#. Prefiro usar as chamadas da API do Windows (ou, melhor ainda, uma biblioteca .NET) em vez de examinar manualmente o registro, mas vou tomar qualquer orientação sobre o assunto.
Solução
Depois de fazer mais pesquisas, encontrei uma resposta fácil aqui. Está basicamente usando uma combinação do MsiGetShortcutTarget
e MsiGetComponentPath
funções de msi.dll
.
Outras dicas
Receio que Ishelllink seja a API do Windows para usar links de shell! A API do Shell é fortemente baseada em comas.
Mas a boa notícia é que o COM Interop funciona muito bem no .NET. Este site geralmente é um recurso muito bom:
http://www.pinvoke.net/default.aspx/interfaces/ishelllinka.html