Удалить приложение программно - PullRequest
0 голосов
/ 28 февраля 2012

У нас есть надстройка Excel, скажем, A, написанная на C #, надстройка Express. Установщик построен из проекта установки в VS. Теперь мы хотим интегрировать его в другое большее приложение-надстройку, скажем B. мы хотим иметь возможность удалить A во время установки B. B также написан на C #, но его установщик построен из Advanced Installer.

Я пробовал VBA, как показано ниже, AddIns содержат только «A XLL Add In», но не «A COM Add In». так что не работает. Поэтому я думаю написать exe-файл, чтобы определить, установлен ли A, и если да, удалить его. и вызвать exe в установщике B.
Кто-нибудь знает, как «удалить программу в C #»? или есть лучшие решения? Спасибо Как только я смогу обнаружить A и удалить его в exe-файле, я смогу подключить его к установщику B. Класс Installer / Uninstaller в .NET не является опцией, так как я не использую их в установщике B.

Dim item As AddIn
Set item = Application.AddIns("A COM Add In")

If Not item Is Nothing Then
    item.Installed = False
    'item = Nothing 'Not sure if this does anything
End If

    Dim item As AddIn
Set item = Application.AddIns("A XLL Add In")

If Not item Is Nothing Then
    item.Installed = False
    'item = Nothing 'Not sure if this does anything
End If

Ответы [ 4 ]

2 голосов
/ 28 февраля 2012

Вы можете удалить предыдущую версию, вызвав MSI напрямую:

msiexec /x YOUR-PRODUCT-CODE

Замените YOUR-PRODUCT-CODE реальным идентификатором продукта, использованным в пакете MSI, в котором установлена ​​надстройка A.

Вы можете добавить опцию /qn, чтобы полностью отключить ее пользовательский интерфейс.

MSI также предоставляет API, который вы можете использовать, чтобы узнать, установлен ли продукт, и удалить его.

1 голос
/ 28 февраля 2012

Вы можете использовать один и тот же код обновления для обоих установщиков.Если код обновления такой же, а установщик B имеет более высокую версию, чем A, то пакет A будет удален MSI во время установки B.

0 голосов
/ 28 февраля 2012

Вы можете использовать WMI - ManagementObject для этого.

 ManagementObjectSearcher search = new ManagementObjectSearcher("SELECT * FROM    Win32_Product"); 

 ManagementObject product = search.Get().Cast<ManagementObject>().ToList().Where(obj
=> obj["Name"].ToString().StartsWith([Name of product to Uninstall])).FirstOrDefault();

 if (uninstallObject != null)
    object result = product.InvokeMethod("Uninstall", null);
0 голосов
/ 28 февраля 2012

Ваш подход правильный - в частности, созданный вами exe-файл должен быть Setup.exe, который обеспечит выполнение предварительных условий. Т.е. будет удалено A.

То, как вы создаете setup.exe, очень зависит от того, какие инструменты вы должны использовать - извините, я могу вам очень помочь, поскольку я использую wix3.0, который весьма ограничен в этом конкретном отношении.

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