Вам нужно определить свою собственную функцию сравнения и использовать usort
или uasort
, если вы хотите поддерживать ассоциацию индексов.
В дополнение к проверке версий файла отличаются, поскольку StingyJack упомянул, что у Вас есть другая проблема. Из документации VS (извините, не онлайн)
, Если Вы установили и установку и удаляете пользовательские действия в проекте установки приложения, и Вы включили свойство RemovePreviousVersions в Visual Studio 2005, предыдущая версия продукта удаляется во время обновления. Однако это поведение, измененное в Visual Studio 2008 следующим образом:
В Visual Studio 2005, пользовательские действия назвали следующим образом на обновлении от v1.0.0 до v1.0.1:
v1.0.0 Удаление пользовательского действия ()
v1.0.1 Установка пользовательского действия ()
В Visual Studio 2008, действие удаления не называют, следующим образом:
v1.0.1 Установка пользовательского действия ()
при создании пользовательских действий, полагающихся на старое поведение необходимо изменить код для нового поведения. Это изменение поведения влияет только на обновления, не удаления.
, Таким образом, Вы устанавливаете сервис с помощью пользовательского действия - но при обновлении части Удаления, не называется, как Вы ожидаете, и Вы пытаетесь Установить по существующей, рабочей версии.
я думаю что, когда его просьба о перезагрузке состоит в том, потому что она не может обновить сервисный файл пока его выполнение.
Две опции:-
Добавляют код к Вашему пользовательскому действию Установки/Фиксации, чтобы Остановить сервис, ожидать установщика, чтобы заменить сервисные файлы и затем перезапустить сервис. См. ответ PonalSuper3 в этом потоке
Отложенный поведение VS2008 к тому, как это работало в VS2005 (старое пользовательское действие Удаления версий называют перед новой Установкой версии) при помощи Косатки для изменения InstallExecuteSequence. RemoveExistingProducts, чтобы сразу быть после.InstallInitialize - обычно Вы устанавливаете.RemoveExistingProducts на 1525, но проверяете Ваш отдельный MSI.
я добавил сценарий, чем можно добавить к процессу сборки для изменения InstallExecuteSequence
MSIУдостоверьтесь, что версия блока сервиса и GUID (В AssemblyInfo.vb/cs) становится измененной при развертывании каждого нового пакета установщика. Если это обнаруживает ту же версию, затем обновляет сбой.
Поместите "Not (Installed OR PREVIOUSVERSIONSINSTALLED)" в свойство Custom Actions->Install Condition (УСТАНОВКА ИЛИ ПРЕВИОЗВЕРШЕНИЕ).