В частности, мы создали установщик .msi, который устанавливает сборки в GAC и имеет встроенную операцию DoRegisterTypeLib на msxml3.dll. Однако (и так или иначе), плохая версия msxml3.dll (8.70.1104.0, о которой знает Microsoft) все еще существует на некоторых ПК конечных пользователей. И что DoRegisterTypeLib терпит неудачу (с кодом ошибки 11), если msxml3.dll - это плохая версия. Мы говорим нашим конечным пользователям: «Восстановите» их установку .NET и бум, все работает.Что происходит под капотом, когда пользователь выбирает «Ремонт» в своей установке .NET?
Итак, что же делает этот «ремонт»? Он обновляет некоторые/любые файлы Microsoft.dll?
И даже если мы не должны делать этот DoRegsiterTypeLib на этом (или любом .dll), я все еще очень хочу знать, что делает «Repair .NET» под капотом. Любое понимание любого человека было бы оценено!
Он перезаписывает gazillion ключи реестра. Который включает в себя исправление всего, что может быть затронуто установщиком, сбросив плохую библиотеку DLL или вызвав реестр, что Microsoft должна решать каждый день. Никогда не думайте об этом сами, вы не поймете это правильно. Вы подвергаете себя таким плохим установщикам, завися от msxml3, вам нужно перейти на msxml6. –
Почти наверняка вы не должны делать вызов DoRegisterTypeLib. Помимо возможных проблем, связанных с его использованием отдельно от простого (например) модуля слияния, ваше пользовательское действие может выполняться во время ремонта вашего продукта, если это условие неверно. Это просто беспорядок, если вы зарегистрируете некорректный Dll typelib, затем исправление NET исправляет его, а затем ваш ремонт снова запускает ваше настраиваемое действие. – PhilDW