Как я могу подавить это действие, действительное только для продуктов, которые в настоящее время установлены при запуске msiexec / x для несуществующего элемента?

Я пытаюсь убедиться, что определенного программного обеспечения не существует, перед установкой более новой версии. Короче говоря, поставщик требует, чтобы я сделал это, и хотя они рекомендуют мне отремонтировать после установки, это вызывает другие проблемы, такие как нежелательный перезапуск (поверьте мне, я пробовал / norestart, и у меня даже попытался изменить сохраненный пакет msi, чтобы убедиться, что он не перезапускается), но в целом это вызывает у нас очень много головной боли без желаемого результата.

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

Теперь я выполняю это, запустив командный файл через ExePackage (с набором инструментов WiX) с Vital = no. Мне нужно сделать Vital = no, потому что, когда более старый установщик не существует, и если я вызываю msiexec /x, он возвращает сообщение об ошибке

это действие действительно только для продуктов, которые в настоящее время установлены

Когда существует более старая установка, она работает нормально, но когда ее нет, она выдает ошибку.

Теперь Vital = no работает нормально, но я бы предпочел подавить ошибку с помощью msiexec /x, если смогу.

Есть ли какой-нибудь известный способ решить эту проблему?


person ShinT    schedule 27.10.2020    source источник
comment
Пожалуйста, посмотрите мой ответ ниже. Я не видел этого вопроса до сих пор. Надеюсь, это не больше сбивает с толку, чем помогает.   -  person Stein Åsmul    schedule 09.11.2020


Ответы (2)


Чтобы решить эту проблему, я проверил ключи удаления и позвонил msiexec /x только для продуктов, которые были перечислены. Хотя в моем случае мы меняли технологию установки (слишком много ошибок MSI ...) и удаляли свои старые версии.

person Joshua    schedule 27.10.2020
comment
Как вы проверяли наличие предмета? через просмотр реестра, например Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \? - person ShinT; 28.10.2020
comment
@ShinT Ага, вот где. - person Joshua; 28.10.2020

Состояние установки. Вы можете использовать VBScript для проверки состояния установки продукта, если вам известен GUID продукта (замените здесь образец GUID):

Dim installer : Set installer = CreateObject("WindowsInstaller.Installer")
MsgBox installer.ProductState("{6C961B30-A670-8A05-3BFE-3947E84DD4E4}")

Есть несколько возможных состояний установки. Вот более подробный сценарий для проверки состояния установки продукта. См. раздел 7 здесь .

Основные обновления: я полагаю, вы знаете, как работают основные обновления? (удаление существующей установки и установка более новой версии с параметрами, в каком порядке это происходит). На самом деле они могут удалить любой другой пакет MSI при установке с помощью настроек в его таблице обновлений. Сюда входят даже продукты конкурентов (можно сказать, немного сумасшедшие). Однако вы не можете легко установить их снова из MSI из-за ряда технических проблем. Вы можете установить их с помощью загрузчика Burn setup.exe (который, я думаю, вы используете).

person Stein Åsmul    schedule 09.11.2020
comment
Привет, Штейн, к сожалению, серьезное обновление невозможно. Просто путем крупного обновления (в данном случае с SP19 до SP26), цитата из их вики. Если конечный пользователь использует обновление на месте с SP25 или предыдущей версии, после обновления он должен восстановить установку в Панели управления / Программы. В противном случае соединение с базой данных ADO.Net НЕ будет работать. Это потребовало от нас ремонта на ходу, но из-за этого мы слишком часто обращались в службу поддержки, поэтому я решил удалить их. - person ShinT; 10.11.2020
comment
Это Crystal Reports? Иногда вы можете просто удалить их на раннем этапе с помощью крупных обновлений, чтобы хорошо очистить и переустановить, но есть исключения (например, файлы с более ранней версией и другие причуды). - person Stein Åsmul; 10.11.2020
comment
Да, удалить, а затем обновить работает лучше. Просто нужно знать руководство для всех отдельных версий. Однако они не распространяют старые версии установщика, поэтому я мог поддерживать только SP10 и SP19, но, по крайней мере, это покрыто, так что это хорошо. - person ShinT; 10.11.2020
comment
Проверить, используют ли они один и тот же код обновления? Затем вы можете идентифицировать их как связанные продукты и удалять их все по очереди? См. Эти ответы: Подтверждения удаления, Удалить с помощью Powershell (вы вызываете installer.RelatedProducts, который дает список связанных кодов продуктов). - person Stein Åsmul; 10.11.2020
comment
Хороший выбор. Но разве это не даст возможность удалить будущую версию, если они у пользователя есть? Поскольку GUID продукта для будущей версии еще не существует (но при условии, что GUID обновления такой же), я, вероятно, хотел бы этого избежать. А поскольку код продукта неизвестен, я не могу указать номер версии в реестре. - person ShinT; 10.11.2020
comment
С помощью кода обновления - если он остается стабильным (что часто бывает) - вы можете определить любой будущий код продукта для удаления. Все зависит от их релиз-дизайна. Вы просто говорите перечислить все связанные коды продуктов, использующие этот код обновления (сейчас и в будущем). Код обновления предназначен для идентификации семейства продуктов - например, разных версий одного и того же продукта. Часто они могут идентифицировать разные языковые версии одного и того же продукта, но иногда имеют разный код обновления. Конструктивная проблема. - person Stein Åsmul; 10.11.2020