Как проверить, находится ли установленный продукт в поврежденном состоянии?
Я устанавливаю Visual C++ Redistributable 2013 в качестве предварительного условия (если оно не установлено) через мой установщик. Но иногда уже установленный VC++ поврежден, тогда мой установщик не работает, потому что у меня есть функции DLL, вызываемые в CustomAction.
Поэтому мой вопрос: есть ли способ узнать, повреждены ли распространяемые файлы VC++ или нет?
1 ответ
Проверка работоспособности в целом довольно сложная тема. Для файлов, встроенных в Windows, существуют такие инструменты, как SFC, но они не распространяются на другие установленные пакеты. Для пакетов MSI вы можете выбрать восстановление, а в некоторых случаях Windows сделает это автоматически; эта тема в целом называется отказоустойчивостью. Но если автоматическое или ручное восстановление не решит проблемы, с которыми вы сталкиваетесь в дикой природе, это не очень актуально.
Таким образом, возникает вопрос, с какими проблемами вы на самом деле сталкиваетесь, с какой частотой, в чем заключается их исправление и какие проблемы могут быть вызваны попыткой их устранения. Если достаточно вызвать ручное исправление перенаправления VC++, это довольно легко реализовать. Если требуется полная деинсталляция и переустановка, это гораздо более агрессивно; идея сделать эту часть установки натирает меня неправильно. Если вы должны делать это только в очень специфических ситуациях, это может зависеть от того, насколько хорошо вы сможете идентифицировать эти ситуации.
С другой стороны, если вы сосредоточены на том, чтобы убедиться, что ваша установка прошла успешно, вы можете статически связать свои библиотеки DLL пользовательских действий, чтобы они больше не зависели от состояния пакета VC++. Однако это не очень поможет вашему приложению, если оно также зависит от пакета VC++. Возможно, приватизированная копия DLL-библиотеки VC++ может решить эту проблему (если версия 2013 года это поддерживает - я забыл) ценой более сложных операций по обслуживанию вашей копии DLL-файлов VC++ в случае обновлений безопасности.
Но опять же, все это зависит от того, какие проблемы возникают, достаточно ли они часты, чтобы их решать, и является ли лекарство хуже, чем болезнь.