我的应用程序会安装DesKey Dk2加密狗驱动程序(如果它们未安装或低于特定版本)。其中一个用户抱怨每当他从开始菜单快捷方式运行应用程序时,DK2安装开始,然后启动应用程序。没有其他人面临这个问题。
我在Wix脚本中将Dk2称为自定义操作,如下所示。让我们说DK2表示为ABC:
<DirectoryRef Id="TARGETDIR">
<Directory Id="ABCRedistDirectory" Name="ABCDrivers">
<Component Id="ABCRedist" Guid="*">
<File Id="ABC_EXE" Source="$(var.TargetDir)ABC.exe" KeyPath="yes" Checksum="yes"/>
</Component>
</Directory>
</DirectoryRef>
<Property Id="DK2_VERSION">
<RegistrySearch Id="Dk2_Version"
Root="HKLM"
Key="SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\DESkey DK2 Uninstall"
Name="DisplayVersion"
Type="raw" />
</Property>
<Feature Id="ABCRedist" Title="ABC drivers" AllowAdvertise="no" Display="hidden" Level="1">
<ComponentRef Id="ABCRedist"/>
</Feature>
<CustomAction Id="InstallDK2Drivers" FileKey="ABC_EXE" ExeCommand="" Execute="deferred" Impersonate="no" Return="check"/>
<InstallExecuteSequence>
<Custom Action="InstallDK2Drivers" Before="InstallFinalize">
<![CDATA[NOT DK2_VERSION OR DK2_VERSION < "7.34.0.57"]]>
</Custom>
</InstallExecuteSequence>
Windows事件查看器中的警告指向主可执行文件,如下所示:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="FolderName">
<Directory Id ="MyFolder" Name="MyApp">
<Component Id ="MyApp.exe" Guid="*">
<File Id="MyApp.exe" Source ="$(var.TargetDir)MyApp.exe" KeyPath="yes" Checksum ="yes" />
<Shortcut Id="MyAppStartMenuShortcut" Name="My App" Directory="ProgramMenuDir" Icon="MyAppIcon.exe" WorkingDirectory="MyFolder" Advertise="yes"></Shortcut>
<Shortcut Id="MyAppDesktopShortcut" Name="My App" Directory="DesktopFolder" Icon="MyAppIcon.exe" WorkingDirectory="MyFolder" Advertise="yes"></Shortcut>
</Component>
...
现在它没有发生在其他机器上,所以我无法诊断。任何人都可以指出任何明显的错误吗?我该怎么做才能在客户机器上进行诊断,即如何在安装.exe,.dll,VC100 CRT和VC100 MFC以及.Net 4.0 bootstrapper等第三方安装程序时获取日志?
提前致谢。
答案 0 :(得分:1)
我无法从您的帖子中了解您使用的第三方ABC产品是否与正在修复的产品相同,或者客户可能不知道并且您是假设这是你的ABC事情。 WiX片段中没有任何迹象表明你是如何安装ABC的,你所展示的只是它被复制到磁盘上,你不知道你是如何运行它的安装它,也没有快捷方式。
一般情况下发生的事情似乎是其他产品正在进入维修模式。应用程序事件日志中应该有MsiInstaller条目,它们可以说明任何错误,引用组件ID,产品以及文件名或注册表项。 您的设置可能与其他安装有冲突。它不太可能与您的快捷方式有任何关系,除了您的快捷方式被广告,因此它进入组件功能检查,并且显然发现您正在与其他应用程序共享内容,现在需要修复。如果修理的第三方应用程序不是您的ABC产品,那么您将无法重现该问题,除非您还安装了第三方的东西并找出您与之共享的内容,可能是错误的办法。
答案 1 :(得分:0)
这是某种比特流组件吗?我在sourceforge.net上看到了一个带有Python dll的abc项目,包括一些可视化C ++运行时以及其他东西。这绝不是一个正确构造的包,它可能会触发在特定计算机上看到的自修复问题。
要进行调试,需要查看Windows事件日志中存在哪些条目 - 它将指定MSI组件触发修复的内容。由于来自此abc包中的嵌入式组件的COM调用可能会触发系统上安装的任何MSI软件包中的修复,因此该错误仍可能存在于其他软件包中。可以接管与torrent文件关联的文件关联。
答案 2 :(得分:0)
在此日志中,您将找到以“描述:检测产品...”开头的条目,ID为1001或1004.以下是一个示例:
事件ID:1001 说明:检测到产品“{4ED0C75A-8BC5-4520-B9C7-76968FD5677F}”,功能“测试”在组件“{A7B09747-E527-4E1B-AE51-323CD636210F}”的请求中失败“
此信息足以确定触发自修复的包。请提供此信息,我们可以从那里获取。
我在installsite.org从StefanKrüger的MSI FAG中提取了上述样本信息。
答案 3 :(得分:0)
您正在使用广告快捷方式。在Shortcut
元素中,设置Advertise="no"
或完全删除“播发”属性。
有关详细信息,请参阅this SO answer和msdn。