как заменить часть удаления MSI - PullRequest
1 голос
/ 30 декабря 2010

Я собрал установщик MSI, используя проект установки VS2010.

Теперь проект не удаляется из-за «1001 Исключение: неверный формат для аргумента machineName» (см. Ниже) внутри настраиваемого действия.

У меня не получается удалить приложение с помощью удаления из системного элемента управления или msiexec /uninstall.

Есть ли способ принудительного удаления?

Подробности:

Как часть настраиваемого действия, я регистрирую настраиваемый источник событий, который мое приложение использует для регистрации событий в журнале Windows:

public override void Install(IDictionary stateSaver) {  
        base.Install(stateSaver);  
        EventLog.CreateEventSource("VeodinRecorder","Application");  
}  

внутри «Удалить», я пытаюсь удалить этот источник событий с помощью

if (!EventLog.SourceExists("VeodinRecorder"))  
   EventLog.Delete("VeodinRecorder"); `

EventLog.Delete также принимает имя машины в качестве второго аргумента. Поэтому я попытался перезаписать MSI, использованный для удаления, с помощью msiexec /fv и изменил действие удаления:

   EventLog.Delete("VeodinRecorder","."); 
   EventLog.Delete("VeodinRecorder","Application"); 

Я даже оставилвсе "действие по удалению" пусто.

Но, похоже, ничего не работает.

Есть подсказки?

Полный журнал:

Ошибка 1001. Ошибка 1001Исключительныйпроизошло при удалении.Это исключение будет проигнорировано, и удаление продолжится.Тем не менее, приложение может быть не полностью удалено после завершения удаления.-> Неверный формат для аргумента machineName.MSI (60! 68) [22: 49: 00: 101]:
ОТЛАДКА: Ошибка 2769: пользовательское действие _3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.uninstall не закрыло 1 MSIHANDLE.
Программа установки обнаружила непредвиденную ошибку при установке этогопакет.Это может указывать на проблему с этим пакетом.Код ошибки - 2769. Аргументы: _3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.uninstall, 1, CustomAction _3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.uninstall, вернуло, ошибка была завершена, фактическая ошибка - 10%: InstallExecute.Возвращаемое значение 3.
Действие завершено 22:49:00: УСТАНОВИТЬ.Возвращаемое значение 3.

Ответы [ 2 ]

5 голосов
/ 30 декабря 2010

Кажется, что CustomAction.dll не обновлялся при обновлении установки с msiexec /fv.

Теперь я вручную поместил новую сборку CustomAction.dll (с пустым переопределением удаления) в папку установки и смог удалить.

Обновление: (Кредиты для @pcans) используют ORCA для редактирования установленной в настоящее время MSI и ручного отключения пользовательского действия удаления.

0 голосов
/ 28 января 2014

Просто для справки Я хочу добавить, что вы также можете пропатчить установленный продукт с незначительным обновлением , чтобы удалить любые ошибочные действия в последовательности удаления доэто называется.Это работает, потому что незначительное обновление - это переустановка того же продукта, а не удаление и переустановка новой версии (которая является серьезным обновлением).Следовательно, вы заменяете последовательность удаления на правильную до запуска ошибочной.

Создание патча довольно сложно, хотя даже с профессиональными инструментами, такими как Wise или Installshield, но в некоторых случаях это единственное исправлениеэто работает, чтобы правильно удалить пакет.Пакет «в дикой природе» в компании должен быть исправлен следующим образом.

Наконец, вы можете использовать msizap.exe от Microsoft для отмены регистрации всего неисправного пакета в базе данных установщика Windows, ноэто нехорошо, так как изменения в системе вообще не откатываются и везде много мусора.Сам инструмент иногда кажется немного шатким, иногда создавая новые ошибки, которые действительно трудно исправить.Предпочтительно использовать его только для отладки .

Еще одно примечание в этом уже длинном ответе: особый случай - это когда вы выполняете пользовательское действие только во время последовательности удаления,и затем он возвращает неверный код возврата - иногда, даже если он выполнил свои операции нормально.Эти действия могут вызвать очень раздражающее « удаление только ситуации отката ».Эффективно ваше удаление отменяется, когда оно сталкивается с пользовательским действием, которое никогда не выполнялось во время установки.Это откатит удаление и, следовательно, будет работать как установка - ваш продукт останется на машине.Довольно странно.

Суть : пропустить коды возврата для пользовательских действий, выполняемых при удалении, используйте другие механизмы проверки, чтобы убедиться, что действие успешно выполнено.

...