Получить установленные приложения в системе

Я хотел иметь возможность c#-language извлекать список приложений install так, как они отображаются csharp в меню "Пуск". Используя c-sharp реестр, я получал записи, которые dot-net не отображались в меню «Пуск».

Я .cs-file также хотел найти путь к installer исполняемому файлу и извлечь c# значок, чтобы в конечном c# итоге сделать красивую программу dot-net запуска. К сожалению, с методом installing реестра это своего рода хит .net и промах, поскольку, по моим c#.net наблюдениям, эта информация installing недоступна надежно.

Моя альтернатива c#-language основана на оболочке: AppsFolder, к .net которой вы можете получить installing доступ, запустив explorer.exe shell:appsFolder, и в которой c-sharp перечислены все приложения, включая installation приложения из магазина, которые .net-framework в настоящее время установлены installer и доступны через меню «Пуск». Проблема setup в том, что это виртуальная installer папка, к которой нельзя получить installing доступ с помощью System.IO.Directory. Вместо .cs-file этого вам придется использовать installing собственные команды shell32. К install счастью, Microsoft опубликовала installer Microsoft.WindowsAPICodePack-Shell на Nuget, который является c# оболочкой для вышеупомянутых setup команд. Достаточно сказать, вот dotnet код:

// GUID taken from https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid
var FOLDERID_AppsFolder = new Guid("{1e87508d-89c2-42f0-8a7e-645a0f50ca58}");
ShellObject appsFolder = (ShellObject)KnownFolderHelper.FromKnownFolderId(FOLDERID_AppsFolder);

foreach (var app in (IKnownFolder)appsFolder)
{
    // The friendly app name
    string name = app.Name;
    // The ParsingName property is the AppUserModelID
    string appUserModelID = app.ParsingName; // or app.Properties.System.AppUserModel.ID
    // You can even get the Jumbo icon in one shot
    ImageSource icon =  app.Thumbnail.ExtraLargeBitmapSource;
}

Вот и все. Вы также можете .net-framework запускать приложения с помощью

System.Diagnostics.Process.Start("explorer.exe", @" shell:appsFolder\" + appModelUserID);

Это install работает для обычных приложений .net Win32 и приложений магазина c-sharp UWP. Как насчет яблок.

Поскольку c#.net вас интересует перечисление .net всех установленных приложений, разумно visual-c# ожидать, что вы, возможно, захотите c#.net также отслеживать новые или c# удаленные приложения, что c# можно сделать с помощью ShellObjectWatcher:

ShellObjectWatcher sow = new ShellObjectWatcher(appsFolder, false);
sow.AllEvents += (s, e) => DoWhatever();
sow.Start();

Изменить. Также installer может быть интересно узнать, что installer упомянутый выше AppUserMoedlID setup - это unique ID Windows uses to group windows in the taskbar.

c#

.net

installation

2022-11-16T20:52:40+00:00
Вопросы с похожей тематикой, как у вопроса:

Получить установленные приложения в системе