Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb6 诊断自愈MSI_Vb6_Windows Installer_Installation_Autocad - Fatal编程技术网

Vb6 诊断自愈MSI

Vb6 诊断自愈MSI,vb6,windows-installer,installation,autocad,Vb6,Windows Installer,Installation,Autocad,我工作的应用程序主要是用VB6编写的 一些用户报告说,当他们启动我的应用程序时,另一个MSI安装程序将自动运行并尝试修复它自己的安装。这通常适用于AutoCAD,但有时也适用于其他程序 通常,每次他们启动应用程序时都会发生这种情况 我们可以使用什么程序来诊断为什么会发生这种情况?因为它是第三方的安装程序,正在运行,所以我们无法了解它在做什么 AutoDesk在此网站上发布了一些信息: 但这些并不能直接提供足够的信息理想情况下,我希望能够完全防止最终用户发生这种情况,而不仅仅是告诉他们如何

我工作的应用程序主要是用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%中)

接下来,运行安装程序,并让AutoCad安装程序运行

现在转到%temp%,您应该可以找到文件MSIXXXX.LOG-一个用于安装程序,一个用于AutoCad。打开这些文件,您可以通过自己的方式查看它们,并确定AutoCad MSI查找到的文件或注册表项丢失或更改

您可能会发现WiLogUtl.exe对此很有帮助:

幸运的话,您会发现触发自动修复的目录、文件或注册表项也在安装程序中。如果您真的很幸运,您可以将其标识为一个无论如何都不应该安装的项目-可能您引用的是一个无论如何都会出现的系统组件,它受Windows文件保护


如果没有,您将不得不查看类似RegFree COM的东西,以便将文件从共享目录移到您的私有目录中,并减少注册表冲突。另外,如果您正在使用(消费)VisualC++运行时MSM来创建MSI,那么请考虑使用微软exe安装程序来代替或(最好)将DLL直接放置在程序文件夹中,因为我发现MSMS会导致这种问题。p> 第一个链接描述了您应该查找的事件日志条目的类型。它将告诉您Windows Installer检测到需要修复的组件。这取决于您找出该组件需要维修的原因,或者更好地描述它,以便我们能够提供帮助。另请参见显示的安装程序,它是来自您的应用程序还是来自Autodesk/AutoCAD?运行的是AutoCAD安装程序,而不是我们自己的。问题已经澄清-谢谢。我记得很久以前(当我在VB6项目上工作时)发生过这种事情,尽管在我们的例子中是Microsoft Office安装程序。不知何故,项目和Office都使用了一些公共库,Windows Installer每次都必须确保它是“正确的”。不过,我不记得有过深入的了解。看起来我们的安装程序没有编写这些密钥;但这是一件非常有用的事情。我已经添加了您引用的链接中的关键位,以防将来它消失。