Как определить, когда пользователь добавляет или удаляет программу в WPF C # - PullRequest
0 голосов
/ 23 сентября 2019

Мое приложение WPF похоже на док-станцию ​​MacBook, которая отображает приложения.Я хочу обновлять список приложений в моем приложении всякий раз, когда пользователь устанавливает или удаляет программу.

Что может быть хорошим способом записи события добавления / удаления программы?

Поскольку большинство людей отмечают слишком широкий круг, я собираюсь уточнить:

  1. Я еще ничего не пробовал.Единственное, о чем я думаю, - это время от времени пересматривать реестр, чтобы увидеть, изменился ли список программ.Это будет работать наверняка, однако, это мой вариант резервного копирования на данный момент, и я ищу лучшее решение.

  2. Под установленным приложением я имею в виду приложение, с которым связан ключ реестра, связанный сон находится в любом из этих мест и поэтому отображается в окне добавления / удаления программ.

HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion \ Удалить HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ WOW6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall

Под удаленным приложением я имею в виду - программу, которую вы удалили из окна добавления / удаления программы.

1 Ответ

0 голосов
/ 24 сентября 2019

Решил это.Когда вы добавляете или удаляете программу (устанавливаете / удаляете), Windows записывает события в Журнал событий (Просмотр событий) в WindowsLogs / Application.Вы можете прослушивать, когда добавляется новая запись в журнале, используя EventLog.EntryWritten

EventLog eLog = new EventLog();
eLog.Log = "Application"; //MsiInstaller events are written in Application
eLog.EntryWritten += Log_NewInstallUninstallOccured; //Add the event and remove it when you want to stop listening
eLog.EnableRaisingEvents = true; // Enable event raising

private void Log_NewInstallUninstallOccured(object sender, EntryWrittenEventArgs e)
        {
            if (e.Entry.Source == "MsiInstaller") //MsiInstaller is the source responsible for installation related events
            {
                if(e.Entry.Message.Contains("Installation completed successfully."))
                {
                    Console.WriteLine("Installation Occured");
                }
                else if (e.Entry.Message.Contains("Removal completed successfully."))
                {
                    Console.WriteLine("Removal Occured");
                } else
                {
                    Console.WriteLine("Other Installation Event Occured");
                }
            }
        }

Источники:

Как узнать, какой пользователь установил или удалил приложение в Windows

Класс EventLog

EventLog.EntryWritten Event

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...