我使用的应用程序主要是用VB6编写的。
一些用户报告说,当他们启动我的应用程序,一个不同的MSI安装程序将自动运行,并试图修复自己的安装。这通常是针对AutoCAD的,但有时也适用于其他程序。
通常情况下,每次启动应用程序时都会发生这种情况。
,什么是我们可以用来诊断为什么会发生这种情况的过程?,因为它是一个第三方的安装程序,正在运行,所以我们对它所做的事情没有任何可见性。
AutoDesk确实发布了一些有关这方面的信息:
但这些数据并不能直接提供足够的信息。理想情况下,我希望能够完全防止最终用户发生这种情况,而不是仅仅告诉他们如何避免或清理它。
发布于 2017-04-20 18:53:20
安装程序操作的目录、文件或注册表键是Windows知道的AutoCad安装的一部分。
首先,我将打开全局Windows日志记录。--这意味着任何Windows活动--包括AutoCad的安装程序--都被写入外部日志文件( %temp%)。
接下来,运行您的安装程序,让AutoCad安装程序运行。
现在转到%temp%,您应该找到MSIXXXX.LOG文件--一个用于安装程序,一个用于AutoCad。打开这些文件,您可以按自己的方式完成这些操作,并确定AutoCad所找到的哪个文件或注册表键丢失或更改。
您可能会发现WiLogUtl.exe对此很有帮助:
幸运的是,您将识别触发自动修复的目录、文件或注册表键也在安装程序中。如果你真的很幸运,你可以确定它是一个你不应该安装的项目--也许你是在引用一个系统组件,不管怎么说,它都是由Windows文件保护所保护的。
如果不是,您将不得不查看类似RegFree COM的内容,以便将文件从共享目录中移出您的私有目录,并减少注册表冲突。此外,如果您使用(消费) Visual C++运行时MSM来生成MSI,请考虑使用Microsoft安装程序,或者(最重要的是)将all直接放置在程序文件夹中,因为我发现MSM可能会导致此类问题。
发布于 2016-08-28 16:48:48
关于小彼得·库珀对VB6引起自我修复的评论。请查看Wix的heat.exe文档。您将看到该工具支持一个特殊的开关来禁止提取VB6运行时本身所拥有的某些注册表值(因此不应该干扰或更新任何其他MSI):http://wixtoolset.org/documentation/manual/v3/overview/heat.html
沿着列表向下转到、开关、-svb6、,然后向右阅读描述。(转载于此:)
注册在VB6中创建的COM组件时,它会添加作为VB6运行时组件一部分的注册表项:
以及引用这两种类型库的任何接口
您的安装程序会写入这些密钥吗?如果是这样的话,试着把他们排除在外--即使在这种情况下这不是罪魁祸首,这也是很好的做法。
除此之外,这里还详细描述了导致Windows自我修复的原因:如何确定导致Windows安装程序重复自我修复的原因?。这是一篇很长的文章,因为有很多不同的方法可以自我修复。共同点是,您系统上的不同安装程序正在争夺一个共享设置,在每个应用程序启动时,它们都会在一个无休止的循环中使用自己的值不断更新该设置。
https://stackoverflow.com/questions/39122331
复制相似问题