当用户选择“时,引擎盖下会发生什么?”;“修理”;在他们的.NET安装上?

当用户选择“时,引擎盖下会发生什么?”;“修理”;在他们的.NET安装上?,.net,windows-installer,msxml3,.net,Windows Installer,Msxml3,特别是,我们创建了一个.msi安装程序,将程序集安装到GAC中,并在msxml3.dll上具有内置的DoRegisterTypeLib操作。然而(不知何故),一些最终用户的电脑上仍然存在错误的msxml3.dll版本(8.70.1104.0,微软知道)。如果msxml3.dll是错误的版本,则DoRegisterTypeLib将失败(错误代码为11)。我们告诉我们的最终用户“修复”他们的.NET安装,然后砰的一声,一切正常 那么,这个“修复”又有什么作用呢?它是否更新某些/任何Microsoft

特别是,我们创建了一个.msi安装程序,将程序集安装到GAC中,并在msxml3.dll上具有内置的DoRegisterTypeLib操作。然而(不知何故),一些最终用户的电脑上仍然存在错误的msxml3.dll版本(8.70.1104.0,微软知道)。如果msxml3.dll是错误的版本,则DoRegisterTypeLib将失败(错误代码为11)。我们告诉我们的最终用户“修复”他们的.NET安装,然后砰的一声,一切正常

那么,这个“修复”又有什么作用呢?它是否更新某些/任何Microsoft.dll


即使我们不应该在它(或任何.dll)上创建DoRegsiterTypeLib,我仍然很想知道“Repair.NET”在引擎盖下的作用。任何人如有任何见解,将不胜感激

它检查每个组件并检查其关键路径是否存在且正确

它将注册dll和组件,并将丢失的损坏文件复制到INSTALLDIR

您可以激活维修日志 第一步是打开windows的日志记录 安装程序。您可以在运行MSI时执行此操作(假设您 直接运行MSI文件,不使用控制面板)或使用 注册表设置以全局打开日志记录。看见
详情请参阅

然后我将查看特定的相关注册表项。我们从命令行调用.msi,并尽可能多地打开日志记录,但对于记录.NET修复本身,这是一个很好的建议。如果可以的话,我会+1…发布你的发现,这总是表示感谢的好方法;)你可以稍后再投票,实际上有更高级别的活动正在进行。NET Framework不是单个MSI。它是一个EXE引导程序,根据您的操作系统和比特数将多个包链接在一起。修复调用EXE修复,然后EXE修复调用各种MSI上的修复。它可能正在检查密钥文件,也可能没有。它可能只是重新安装=全部。更具体地说,修复通常以pocmus的重新安装模式运行,因此丢失或版本较低的文件将从MSI修复回原始版本。如果有人确实需要知道到底发生了什么(与学术问题相比)要问的人是希思·斯图尔特和亚伦·斯蒂布纳。他们的博客很容易找到,它重写了无数的注册表项。这包括修复任何可能受到安装程序删除坏DLL或注册表损坏影响的问题,这是微软每天都需要处理的问题。不要考虑自己做这件事,你不会做对的。由于依赖于msxml3,您将面临如此糟糕的安装程序,您需要迁移到msxml6。几乎可以肯定,您不应该执行DoRegisterTypeLib调用。除了单独使用(例如)合并模块之外,如果条件不正确,在修复产品期间可能会运行自定义操作。如果你注册了一些不正确的Dll类型库,那么网络修复会修复它,然后你的修复会再次运行你的自定义操作,这就是一团糟。