Вопрос

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

Теперь проект не DEINSTALL из -за исключения «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 также принимает MachinENAME в качестве второго аргумента, поэтому я попытался перезаписать MSI, используемый для удаления с msiexec /fv и изменил действие удаления:

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

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

Но, казалось, ничего не сработало.

Какие -нибудь подсказки?

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top