Лучший способ установить .NET Service в MSI, чтобы его можно было обновлять? - PullRequest
3 голосов
/ 15 сентября 2010

У меня установлена ​​программа MSI, созданная с помощью InstallShield 2009, которая устанавливает службу .NET, установив для «.NET Installer Class» значение «Да» для компонента, содержащего exe службы. Эта базовая установка, которая содержит файлы, а exe устанавливает ОК. Я создал небольшое обновление MSP, которое обновляет exe-файл службы при первоначальной установке. Когда я запускаю MSP в системе, содержащей базовую установку, я получаю сообщение об ошибке 1001, потому что оно пытается переустановить службу во время установки небольшого обновления MSP.

Официальный ответ Flexera на эту проблему заключается в том, что если необходимо обновить исполняемый файл .NET, то для компонента «.NET Installer Class» следует установить значение «Нет» и создать собственные пользовательские действия. Flexera также признала, что они нигде не документируют, что если вы установите для «.NET Installer Class» значение «Да», вы не сможете затем создавать обновления MSP для вашей установки. Невозможно вернуться назад и изменить базовую установку, поскольку она была выпущена, и для нее необходимо создать обновление. Я сам придумал обходной путь, включив настраиваемое действие в обновление MSP, которое удаляет службу во время установки MSP. При этом устанавливается небольшое обновление MSP, но этот обходной путь не работает для удаления MSP из ARP.

Мне нужно знать, как решить эту проблему в будущих установках. Как установить службу .NET таким образом, чтобы впоследствии можно было легко обновить службу с помощью небольшого обновления MSP?

Ответы [ 2 ]

1 голос
/ 16 сентября 2010

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

0 голосов
/ 15 сентября 2010

Лучшим способом было бы использовать MS BITS (фоновую интеллектуальную службу передачи Microsoft), которая похожа на Windows Update.

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

Для получения дополнительной информации о BITS и его использовании в .NET

http://msdn.microsoft.com/en-us/library/aa362708(VS.85).aspx
http://msdn.microsoft.com/en-us/magazine/cc188766.aspx
http://www.codeproject.com/KB/IP/sharpBITS.aspx
...