2017-02-14 27 views
0

Я устанавливаю Visual C++ Redistributable 2013 как предварительное условие (если оно не установлено) через моего установщика. Но иногда уже установленный VC++ поврежден, тогда мой установщик не работает, потому что у меня есть DLL-функции, вызываемые в CustomAction.Как проверить, находится ли установленный продукт в коррумпированном состоянии?

Так что мой вопрос: есть ли способ узнать, поврежден ли распространенный распространяемый VC++ или нет?

ответ

1

Проверка здоровья в целом довольно сложная тема. Для файлов, встроенных в Windows, существуют такие инструменты, как SFC, но это не распространяется на другие установленные пакеты. Для пакетов MSI вы можете выполнить ремонт, и в некоторых случаях Windows сделает это автоматически; эта тема в общем называется Resiliency. Но если автоматическое или ручное восстановление не устраняет проблемы, с которыми вы сталкиваетесь в дикой природе, это не очень важно.

Таким образом, возникает вопрос, с какими проблемами вы сталкиваетесь, с какой частотой, какими их исправлениями и какие проблемы могут быть вызваны попыткой их исправить. Если достаточно вызвать ручной ремонт VC++ redist, это довольно просто реализовать. Если требуется полная деинсталляция и переустановка, это гораздо более инвазивно; идея сделать эту часть инсталляции трещит меня неправильно. Если вам нужно сделать это только в особых ситуациях, это может зависеть от того, насколько хорошо вы можете идентифицировать эти ситуации.

В качестве альтернативы, если ваш фокус гарантирует успешную установку, вы можете статически связать свои DLL настраиваемых действий, чтобы они больше не зависели от состояния пакета VC++. Однако это не поможет вашему приложению, если приложение также зависит от пакета VC++. Возможно, приватизированная копия библиотек VC++ может решить эту проблему (если версия 2013 года поддерживает это, я забыл) за счет дополнительных проблем с обслуживанием вашей копии VC++ DLL в случае обновлений безопасности.

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