Vb6 诊断自愈MSI
我工作的应用程序主要是用VB6编写的 一些用户报告说,当他们启动我的应用程序时,另一个MSI安装程序将自动运行并尝试修复它自己的安装。这通常适用于AutoCAD,但有时也适用于其他程序 通常,每次他们启动应用程序时都会发生这种情况 我们可以使用什么程序来诊断为什么会发生这种情况?因为它是第三方的安装程序,正在运行,所以我们无法了解它在做什么 AutoDesk在此网站上发布了一些信息:Vb6 诊断自愈MSI,vb6,windows-installer,installation,autocad,Vb6,Windows Installer,Installation,Autocad,我工作的应用程序主要是用VB6编写的 一些用户报告说,当他们启动我的应用程序时,另一个MSI安装程序将自动运行并尝试修复它自己的安装。这通常适用于AutoCAD,但有时也适用于其他程序 通常,每次他们启动应用程序时都会发生这种情况 我们可以使用什么程序来诊断为什么会发生这种情况?因为它是第三方的安装程序,正在运行,所以我们无法了解它在做什么 AutoDesk在此网站上发布了一些信息: 但这些并不能直接提供足够的信息理想情况下,我希望能够完全防止最终用户发生这种情况,而不仅仅是告诉他们如何
但这些并不能直接提供足够的信息理想情况下,我希望能够完全防止最终用户发生这种情况,而不仅仅是告诉他们如何避免或清理。关于Peter Cooper Jr关于VB6导致自我修复的评论。请查看Wix的heat.exe文档。您将看到,该工具支持一个特殊的开关,用于禁止提取VB6运行时本身拥有的某些注册表值(因此不应被任何其他MSI弄乱或更新): 从列表中转到开关-svb6,并阅读右侧的说明。(此处转载:) 注册在VB6中创建的COM组件时,会添加注册表 作为VB6运行时组件一部分的条目:
- CLSID{D5DE8D20-5BB8-11D1-A1E3-00A0C90F2731}
- 类型库{EA544A21-C82D-11D1-A3E4-00A0C90AEA82}
- 类型库{000204EF-0000-0000-C000-0000000000 46}
除此之外,这里还有一个关于Windows Installer自我修复原因的详细描述:。这是一篇很长的文章,因为有很多不同的自我修复方式。共同点是,系统上的不同安装程序正在争夺一个共享设置,在每次应用程序启动时,它们都会不断使用自己的值更新该设置。您的安装程序是在Windows installer知道是AutoCad安装的一部分的目录、文件或注册表项上运行的 首先,我将打开“全局Windows Installer日志记录”。这意味着任何Windows Installer活动(包括AutoCad的安装程序)都将写入外部日志文件(在%temp%中)
如果没有,您将不得不查看类似RegFree COM的东西,以便将文件从共享目录移到您的私有目录中,并减少注册表冲突。另外,如果您正在使用(消费)VisualC++运行时MSM来创建MSI,那么请考虑使用微软exe安装程序来代替或(最好)将DLL直接放置在程序文件夹中,因为我发现MSMS会导致这种问题。p> 第一个链接描述了您应该查找的事件日志条目的类型。它将告诉您Windows Installer检测到需要修复的组件。这取决于您找出该组件需要维修的原因,或者更好地描述它,以便我们能够提供帮助。另请参见显示的安装程序,它是来自您的应用程序还是来自Autodesk/AutoCAD?运行的是AutoCAD安装程序,而不是我们自己的。问题已经澄清-谢谢。我记得很久以前(当我在VB6项目上工作时)发生过这种事情,尽管在我们的例子中是Microsoft Office安装程序。不知何故,项目和Office都使用了一些公共库,Windows Installer每次都必须确保它是“正确的”。不过,我不记得有过深入的了解。看起来我们的安装程序没有编写这些密钥;但这是一件非常有用的事情。我已经添加了您引用的链接中的关键位,以防将来它消失。