Автоматизировать развертывание Excel AddIn

Я создал надстройку Excel, используя компонент AddIn Express .Net. Бизнес-пользователи устанавливают надстройку, используя MSI, предоставленный командой разработчиков. Каждый раз, когда мы вносим какие-либо изменения в продукт и предоставляем его бизнес-пользователям, им необходимо вручную удалить существующую надстройку, а затем установить новую с обновленным MSI.

Я хотел знать, есть ли какой-нибудь способ, которым этот процесс может быть автоматизирован с использованием некоторых командных файлов Windows, скриптов или небольшой консольной программы на C#. В идеале следует удалить существующую надстройку, дождаться завершения процесса удаления и затем установить новую надстройку.

Я пробовал несколько вариантов, используя Msiexec, scriptcs и т. Д., Но пока безуспешно. Моя основная проблема заключается в том, что после запуска существующего процесса удаления надстройки немедленно начинается установка нового надстройки, после чего появляется стандартное сообщение Windows "Установка уже выполняется..."

Любая помощь будет оценена.

Спасибо

2 ответа

Решение

Я уже ответил на похожий вопрос, где это, казалось, помогло:

Пакетный файл Windows не ожидает завершения команд

Обычно, когда у вас есть командный файл с двумя строками:

call msiexec /x {...} /qb
call msiexec /i "c:\myPath\myProduct.msi" /qb

это должно работать в том смысле, что удаление ожидает перед началом установки.

  • "Звонок" важен!
  • Для удаления предыдущих версий вы должны использовать /x {ProductCode to fill in} вместо /x "filename", В каждом случае использование кода продукта безопаснее.
  • Чтобы быть уверенным, что произойдет, вы можете добавить pause Линия между двумя и в конце.

Если кажется, что он по-прежнему не работает, необходимо выполнить цикл до тех пор, пока продукт действительно не будет удален, подождите две секунды и продолжите установку.

Есть несколько возможностей узнать, установлена ​​ли еще программа.

Большинство людей рекомендуют сценарий VB как самое простое решение, по крайней мере, они наиболее известны. Вот фрагмент VBS от saschabeaumont для вызова удаления из другого вопроса: MSI Install Fails, потому что "Другая версия этого продукта уже установлена"

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

Конечно, это возможно в других языках сценариев, а именно в JScript, Powershell и традиционных языках программирования. Это трудно сделать в чистых пакетных сценариях - например, вы можете протестировать запись реестра ProductCode в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall, если продукт установлен. Но нужно упомянуть только один недостаток: нужно учитывать разницу, если пакет запускается из 32/64 битной подсистемы и / или MSI 32/64 бит. Поэтому я бы посоветовал использовать VBS вместо пакета (вы можете вызвать его из пакета с помощью cscript xxx.vbs).

Несколько вещей здесь:

  1. Первый вопрос: знаете ли вы о папке xlstart в Excel, которая позволяет легко загружать определенные файлы надстроек при запуске Excel, просто помещая их в эту папку. Насколько я знаю, вы не можете отключить надстройки таким способом через графический интерфейс Excel, вы должны удалить их из папки xlstart, чтобы не загружать их в Excel.

  2. Вторая проблема заключается в том, что вы должны обновить свой файл MSI, чтобы использовать основное обновление, чтобы оно автоматически удаляло существующий MSI во время установки нового. Это, вероятно, удалит всю проблему, которую вы описываете.

  3. Наконец, вы должны быть в состоянии использовать start wait msiexec.exe /i /qn File.msi чтобы ваш пакетный файл ждал возврата msiexec после первого вызова msiexec. Проверьте Ожидание завершения msiexec.exe. Или вы можете попробовать MSI Software Deployment, используя пакетный файл.

Другие вопросы по тегам