Wix - 每次运行应用程序时安装的第三方软件

时间:2014-04-07 11:11:29

标签: wix installer windows-installer

我的应用程序会安装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等第三方安装程序时获取日志?

提前致谢。

4 个答案:

答案 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)

  • 右键单击“我的电脑”
  • 选择管理
  • 事件日志 - &gt; Windows日志 - &gt;程序

在此日志中,您将找到以“描述:检测产品...”开头的条目,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 answermsdn