首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >诊断自愈性MSI

诊断自愈性MSI
EN

Stack Overflow用户
提问于 2016-08-24 11:40:23
回答 2查看 527关注 0票数 2

我使用的应用程序主要是用VB6编写的。

一些用户报告说,当他们启动我的应用程序,一个不同的MSI安装程序将自动运行,并试图修复自己的安装。这通常是针对AutoCAD的,但有时也适用于其他程序。

通常情况下,每次启动应用程序时都会发生这种情况。

,什么是我们可以用来诊断为什么会发生这种情况的过程?,因为它是一个第三方的安装程序,正在运行,所以我们对它所做的事情没有任何可见性。

AutoDesk确实发布了一些有关这方面的信息:

但这些数据并不能直接提供足够的信息。理想情况下,我希望能够完全防止最终用户发生这种情况,而不是仅仅告诉他们如何避免或清理它。

EN

回答 2

Stack Overflow用户

发布于 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可能会导致此类问题。

票数 2
EN

Stack Overflow用户

发布于 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运行时组件一部分的注册表项:

  • CLSID{D5DE8D20-5B8-11D1-A1E3-00A0C90F2731}
  • Typelib{EA544A21-C82D-11D1-A3E4-00A0C90AEA82}
  • 台风{000204EF-0000-C000-000000000046}

以及引用这两种类型库的任何接口

您的安装程序会写入这些密钥吗?如果是这样的话,试着把他们排除在外--即使在这种情况下这不是罪魁祸首,这也是很好的做法。

除此之外,这里还详细描述了导致Windows自我修复的原因:如何确定导致Windows安装程序重复自我修复的原因?。这是一篇很长的文章,因为有很多不同的方法可以自我修复。共同点是,您系统上的不同安装程序正在争夺一个共享设置,在每个应用程序启动时,它们都会在一个无休止的循环中使用自己的值不断更新该设置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39122331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档