Проект развертывания не обновляет.exe
У меня есть проект Winforms с одним файлом.exe в качестве основного вывода. Я использую проект развертывания для его распространения, но файл.exe не обновляется при установке новой версии, то есть я должен попросить пользователей удалить вручную, а затем установить новую версию.
Вот что я делаю:
- Я увеличиваю версию сборки в выходном проекте (который является основным выходом проекта развертывания)
- Я увеличиваю версию проекта развертывания (и обновляю код продукта при появлении соответствующего запроса)
- Проект развертывания настроен на удаление предыдущих версий
- для свойства 'Permanent' в.exe установлено значение False
Я уверен, что я сделал это раньше успешно, но я не могу сделать это сейчас. Что я делаю неправильно?
Изменить: я получил его на работу, изменив версию файла в свойствах проекта, как в этом ответе
6 ответов
Трудно сказать, что может быть причиной этого. Как вы устанавливаете MSI, который не удаляет предыдущую версию? Я бы порекомендовал запустить установку, которая не работает с подробным ведением журнала. Я бы запустил его из командной строки так:
msiexec /i "project.msi" /l*v "c:\install.log"
/ l указывает msiexec (который является службой установщика) создать журнал, * говорит, чтобы он записывал все, а v указывает использовать подробный режим.
Запустите его и посмотрите на файл журнала, и он должен сказать вам, что не работает и почему. Вы также можете разместить этот файл журнала здесь, и я уверен, что мы сможем найти что-то вместе.
ДОПОЛНИТЕЛЬНЫЕ ВОПРОСЫ: В файле журнала создается впечатление, что установщик считает, что делать нечего. Когда вы заявляете, что обновляете версию файла, что вы обновляете? Как у вас есть файлы для развертывания? Включены ли они как "первичные выходы" в проект установки, или вы включаете сборки напрямую? Есть ли у вас определение зависимостей и их автоматическое включение, или вы включили вывод проекта?
ОБНОВЛЕНИЕ См. Этот пост для описания того, что нужно изменить для автоматического обновления MSI. Вопрос 511789
Наконец-то понял это после того, как несколько часов ударился головой о стену.
Моя проблема была идентична этой и оказалась очень простой для решения. Два ответа выше привели меня в правильном направлении и помогли мне разобраться в моей проблеме, но здесь она в двух словах.
Если для RemovePreviousVersion задано значение true, проблема, скорее всего, связана с настройками приложения под кнопкой информации о сборке.
Я запустил журнал, как показал Мохлсен в ответе выше, msiexec / i "project.msi" / l * v "c: \ install.log", и в результате получил тот же ответ: не перезаписывать; Не исправит; Существующий файл имеет равную версию
Инверс направил меня в правильном направлении, но также немного сбил меня с эталона MFC. Я пишу приложение для Windows и, наконец, соединил два и два вместе и перешел к свойствам приложения, которое я пишу, на вкладке Приложение. Существует кнопка под названием Информация о сборке, которая ведет к версии сборки и версии файла. Я увеличил это, и теперь мой.exe файл обновлений.
Таким образом, вам нужно сделать две вещи: увеличить текущую версию сборки в приложении, которое вы пишете, а также версию установочного пакета.
Еще один совет: если вы откроете файл AssemblyInfo.cs для своего проекта и измените AssemblyVersion на
[Assembly: AssemblyVersion("1.0.*")]
затем информация о версии сборки автоматически обновляется каждый раз при сборке проекта. Затем закомментируйте или удалите запись AssemblyFileVersion из того же файла, поэтому версия файла по умолчанию совпадает с версией сборки. Это означает, что версия файла обновляется автоматически каждый раз, когда вы его создаете, поэтому вам нужно всего лишь обновить версию установщика, чтобы файлы перезаписывались, как вы ожидаете.
Возможно, исполняемый файл вашего приложения не обновляется, поскольку вы не увеличили информационный ресурс VERSION в своем проекте MFC.
Недостаточно просто увеличить версию проекта установки. Увидеть ниже:
http://msdn.microsoft.com/en-us/library/6fkzft86.aspx
"Информация о версии также используется API-интерфейсами установки".
Вы пытаетесь обновить приложение во время работы? Если это так, это будет невозможно. Вам нужно подумать о лучшем способе, например, использовать небольшое внешнее приложение, чтобы завершить текущий запущенный процесс, установить обновление и перезапустить новую версию.
Вы можете попробовать перестроить решение. Вы также можете очистить его, пока вы на нем. Я могу видеть, как это произойдет, если все, что вы изменили, были файлы содержимого. Если нет, то не обращайте внимания.