2010-12-30 4 views
1

Я пытаюсь создать проект MSI, и во время установки я устанавливаю службу Windows. Если эта служба не установлена, я хочу инициировать откат и отменить установку.Как откат или отмена проекта MSI на C#?

Я уже построил класс установщика и переопределил метод установки и удаления. Как я могу начать откат?

+0

Где вы хотите, чтобы начать откат от? что из пользовательского действия? –

+0

Да, у меня есть класс установщика, который был добавлен в процесс установки в пользовательском действии, его установка службы Windows, если эта установка завершилась неудачно, я хочу, чтобы она завершила полную установку и удалила все файлы. – guyl

+0

Попробуйте вернуть 1602 из вашего пользовательского действия: http://msdn.microsoft.com/en-us/library/aa369778(VS.85).aspx –

ответ

1

Прежде всего вы должны знать, что использование специальных действий InstallUtil (независимо от того, как они документированы и написаны) не является хорошим выбором. Выкинь их. То же самое можно сказать о проекте развертывания Visual Studio, который вы используете для выполнения своих пользовательских действий.

Лучшее решение заключается в использовании встроенной поддержки Windows Installer для создания и запуска служб. Используйте InstallShield 2010 Limited Edition (бесплатно) или Windows Installer XML (FOSS). Эти инструменты разоблачить таблицу ServiceControl, которая имеет столбец Wait, что позволяет научить MSI:

Подождите
Оставив это поле пустым или ввода значение 1 вызывает установки ждать максимум 30 секунд для завершения услуги . Ожидание может быть , используемое для дополнительного времени для критического события , чтобы вернуть сбой . Значение 0 в этом поле означает ждать только до тех пор, пока служба управления не сообщит, что эта услуга находится в состоянии ожидания , прежде чем продолжить установку .

ServiceControl Table

+0

Кажется, я ошибаюсь, думая, что 2010 LE поддерживает таблицы ServiceControl/ServiceInstall. Обходной задачей было бы использовать WiX для создания модуля слияния с сервисом, а затем использовать модуль слияния в таблице InstallShield. –

+0

Примечание. Я считаю, что недавно выпущенный ISLE для VS2013 теперь поддерживает ServiceInstall/ServiceControl. –