Ошибка обновления .NET 4.0 при установке MSI - XML ​​не содержит ожидаемой ошибки атрибута - PullRequest
1 голос
/ 15 февраля 2012

У нас есть MSI для установки службы Windows на клиентском компьютере.Служба Windows вызывает веб-службу нашего сервера для выполнения операций.Изначально MSI и веб-сервис создавались с использованием платформы .NET 2.0.

В прошлом квартале мы обновили наши системы до .NET 4.0.Хотя наш веб-сервис все еще ASP.NET, т.е. asmx (а не WCF).Также я установил Framework 4.0 как необходимое условие для установки MSI.

Один из наших клиентов сообщил об этой проблеме:

Клиент использовал .NET Framework 2.0 и установил более старую версию MSIв его системе.Когда он пытался установить .NET Framework 4.0 версии MSI, было предложено установить Framework 4.0 (из-за предварительных условий).Как только установка фреймворка закончилась, он попытался установить MSI и получил эту ошибку.Может кто-нибудь, пожалуйста, направьте меня к резолюции.При необходимости я могу предоставить подробную информацию.

Error while upgrading to 4.0 MSI

РЕДАКТ. 1:

В ходе дополнительных исследований я обнаружил, что это мой файл AppName.installstate.,Удаление удаляет этот файл, но обновление не делает этого.Файл лежит в каталоге установки.При ближайшем рассмотрении я вижу "http://schemas.xmlsoap.org/soap/envelope/:Envelope" в содержимом файла. Любой указатель будет принят с благодарностью.

РЕДАКТИРОВАТЬ 2:

Настраиваемое действие Установитьсоздает файл AppName.installstate, а пользовательское действие Удаление удаляет файл. В моем случае я делаю обновление MSI, которое ничего не делает с этим файлом. Когда я сравнивал файл installstate из 2.0 и 4.0 (оба установлены вручную), я могвижу огромную разницу в синтаксисе XML, схеме и содержании, причина, я получаю ошибку сериализации. Теперь мне нужно знать, почему AppName.installstate не перезаписывается при обновлении. Много гугл, но нигде не приземлился. Посмотрел MSIустановить журнал, но без полезной информации.

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Эврика !!!!

Я нашел решение своей проблемы.

Основная причина проблемы: MSI создает файл XML во время установки (application_name.installstate), в котором хранится информация, используемая MSI во время установки, удаления, отката. Формат этого XML-файла полностью отличается между .NET 2.0 и .NET 4.0, то есть MSI, разработанной с использованием VS2005 и VS2010. Поскольку 4.0 frmaework не может понять файл, сгенерированный версией Old Framework (2.0), мы получаем сообщение об ошибке «Невозможно сериализовать тип файла Installstate». Хотя для этого нет доступной документации, есть обсуждение, которое я нашел> http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/bedbb8bd-dad5-4bcb-a87a-ac69386669b4/

Решение, которое я попытался (я бы назвал обходным): Во время установки новой версии я явно заменяю старый XML-файл новым форматом (4.0). я включил файл application_Name.installstate (сгенерированный новой версией) в свой пакет, поэтому он обновил старый файл при обновлении. MSI был установлен без ошибок и успешно работает.

Ответьте здесь, если кому-то нужны подробности о проблеме и решении.

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

Это сообщение об ошибке не имеет ничего общего с установщиком согласно сообщению об ошибке 1001. Проблема полностью в вашем сервисе.

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

Выполните рефакторинг службы для запуска задания в другом потоке, и установка будет успешно установлена. Оттуда вы можете сосредоточиться на реальной проблеме того, что происходит в вашем процессе десериализации.

...