Как читать ярлыки установщика с помощью C # (WPF)
-
19-09-2019 - |
Вопрос
Предыстория: Я решил самостоятельно изучать C # с помощью WPF и пишу небольшое приложение, которому необходимо получить список ярлыков меню "Пуск" и их целевых объектов и сохранить их.По сути, я пытаюсь использовать все ярлыки и поместить пути к их целевым приложениям в память.Однако я столкнулся с проблемой, пытаясь прочитать ярлыки установщика Windows (те, которые указывают на что-то вроде C:\Windows\Installer\{90120000-0030-0000-0000-0000000FF1CE}\wordicon.exe
-- Microsoft Office - хороший пример этого).Я провел некоторое исследование, и, похоже, Windows использует какую-то закулисную магию, связанную с реестром, чтобы найти фактическое местоположение файла.
Вопрос: Как я могу получить фактическую цель этих ярлыков установщика Windows на C #?Многие источники, которые я нашел, указывают мне на IShellLink
интерфейс, но я не знаю, как использовать его с C #.Я бы предпочел использовать вызовы Windows API (или, что еще лучше, библиотеку .NET) вместо ручного просмотра реестра, но я приму любые рекомендации по этому вопросу.
Решение
Проведя дополнительные исследования, я нашел простой ответ здесь.В основном это использование комбинации MsiGetShortcutTarget
и MsiGetComponentPath
функции msi.dll
.
Другие советы
Я боюсь, ЧТО IShellLink - ЭТО Windows API для использования ссылок на оболочку!API оболочки в значительной степени основан на COM.
Но хорошей новостью является то, что COM-взаимодействие очень хорошо работает в .NET.Этот сайт обычно является очень хорошим ресурсом:
http://www.pinvoke.net/default.aspx/Interfaces/IShellLinkA.html