2015-01-28 4 views
3

В частности, мы создали установщик .msi, который устанавливает сборки в GAC и имеет встроенную операцию DoRegisterTypeLib на msxml3.dll. Однако (и так или иначе), плохая версия msxml3.dll (8.70.1104.0, о которой знает Microsoft) все еще существует на некоторых ПК конечных пользователей. И что DoRegisterTypeLib терпит неудачу (с кодом ошибки 11), если msxml3.dll - это плохая версия. Мы говорим нашим конечным пользователям: «Восстановите» их установку .NET и бум, все работает.Что происходит под капотом, когда пользователь выбирает «Ремонт» в своей установке .NET?

Итак, что же делает этот «ремонт»? Он обновляет некоторые/любые файлы Microsoft.dll?

И даже если мы не должны делать этот DoRegsiterTypeLib на этом (или любом .dll), я все еще очень хочу знать, что делает «Repair .NET» под капотом. Любое понимание любого человека было бы оценено!

+0

Он перезаписывает gazillion ключи реестра. Который включает в себя исправление всего, что может быть затронуто установщиком, сбросив плохую библиотеку DLL или вызвав реестр, что Microsoft должна решать каждый день. Никогда не думайте об этом сами, вы не поймете это правильно. Вы подвергаете себя таким плохим установщикам, завися от msxml3, вам нужно перейти на msxml6. –

+0

Почти наверняка вы не должны делать вызов DoRegisterTypeLib. Помимо возможных проблем, связанных с его использованием отдельно от простого (например) модуля слияния, ваше пользовательское действие может выполняться во время ремонта вашего продукта, если это условие неверно. Это просто беспорядок, если вы зарегистрируете некорректный Dll typelib, затем исправление NET исправляет его, а затем ваш ремонт снова запускает ваше настраиваемое действие. – PhilDW

ответ

1

Он проходит через каждый компонент и проверяет наличие и правильность его KeyPath.

Это будет регистрировать DLL и компоненты, а также копировать поврежденные файлы отсутствуют в INSTALLDIR

Вы можете активировать LOG для ремонта Первый шаг, чтобы включить ведение журнала для окон установки. Это можно сделать при запуске MSI (если вы используете , непосредственно запуская файл MSI, а не используя панель управления) или используйте параметр реестра , чтобы включить ведение журнала в глобальном масштабе. См. http://support.microsoft.com/kb/223300.

+0

Тогда я посмотрю на соответствующие соответствующие разделы реестра. Мы называем наш .msi из командной строки и включаем столько журналов, сколько можем, но хорошее предложение для ведения журнала .NET Repair. Я бы добавил +1, если бы мог ... – branrigg

+0

Опубликовать свои находки, это всегда хороший способ сказать спасибо;) Вы всегда можете проголосовать позже – CheGueVerra

+0

На самом деле происходит более активная деятельность. .NET Framework - это не один MSI. Это загрузочный блок EXE, который объединяет несколько пакетов в зависимости от вашей ОС и битности. Ремонт вызывает восстановление EXE, которое затем вызывает восстановление на разных MSI. Он может или не может проверять ключевые файлы. Он может просто сделать REINSTALL = ALL. –