Настройка удаления и Установка / удаление программы удаления

Есть два способа удалить мое приложение.

  1. Используя ту же настройку.
  2. Установка и удаление программ в панелях управления

У нас есть специальная процедура удаления в нашей настройке, и она запускает некоторые специальные диалоговые окна для получения пользовательского ввода. Таким образом, удаление происходит в соответствии с пользовательским вводом. Но проблема в том, что специальная процедура удаления не выполняется, если вы удалите ее с помощью "Установка и удаление программ". Есть ли способ запустить деинсталляцию для конкретного приложения через "Установка и удаление программ"?

2 ответа

Решение

Если вы используете проект на основе MSI, кнопка "Удалить" запустит удаление в пассивном режиме. Таким образом, любые действия в вашем пользовательском интерфейсе или последовательности диалогов будут пропущены. Чтобы обойти это, обычно отключают кнопку удаления (см. ARPNOREMOVE) и требуют, чтобы конечные пользователи вместо этого проходили через кнопку "Изменить" (которая отображает пользовательский интерфейс).

Вы можете сделать это с помощью WMI. Вы можете настроить свое программное обеспечение для удаления в соответствии с вашими потребностями. Для достижения этого вы должны использовать класс Win32_Product и метод удаления. Ниже приведен пример удаления программы на локальном компьютере:

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class CallWMIMethod
    {
        public static void Main()
        {
            try
            {
                ManagementObject classInstance =
                    new ManagementObject("root\\CIMV2",
                    "Win32_Product.IdentifyingNumber='{EDDE41A3-A870-4D97-A1ED-67FF62AA0552}',Name='MyServiceSetup',Version='1.0.0'",
                    null);

                // No method in-parameters to define


                // Execute the method and obtain the return values.
                ManagementBaseObject outParams =
                    classInstance.InvokeMethod("Uninstall", null, null);

                // List outParams
                Console.WriteLine("Out parameters:");
                Console.WriteLine("ReturnValue: " + outParams["ReturnValue"]);
            }
            catch(ManagementException err)
            {
                MessageBox.Show("An error occurred while trying to execute the WMI method: " + err.Message);
            }
        }
    }
}

Вы можете проверить возвращаемое значение в Кодах ошибок (Windows Desktop Apps).

Другие вопросы по тегам