我正在使用 Wix 为 wpf 应用程序创建 MSI 安装程序。我正在创建 2 个项目,一个是 Wix 设置项目,另一个是 Bootstrapper。安装项目中有一个名为 product.wxs 的文件,Bootstrapper 项目中有一个名为 Bundle.wxs 的文件。我正在 product.wxs 文件中创建快捷方式,如下面的代码所示。我有在 Bootstrapper 中设置项目的引用。我可以在开始菜单中看到这个快捷方式。当我运行此快捷方式时,它会从之前安装的 c:\中删除应用程序。但它仍然显示控制面板中的条目(添加或删除程序)。当我使用 Bootstrapper 项目创建的 Exe 时会发生这种情况。但是当我使用由设置项目创建的安装程序,它运行良好。控制面板中的条目也被删除。我无法弄清楚 bootstrap 项目发生了什么。
这是我在 SetUp 项目中为 Product.wxs 编写的代码:

  <Directory Id="ProgramMenuFolder">
    <Directory Id="ProgramMenuSubfolder" Name="Vizitech Solutions">
      <Component Id="ApplicationShortcuts" Guid="*">
        <Shortcut Id="ApplicationShortcut1" Name="Consenus Sweeper"
                  Description="Consensus"
                  Target="[INSTALLFOLDER]ConsenusSweeper.exe"
                  WorkingDirectory="INSTALLFOLDER">
          <Icon Id="MyAppShortCutIcon" SourceFile="Consensus_128.ico"/>
        </Shortcut>

        <Shortcut Id="UninstallProductStartMenu"
               Name="Uninstall Consensus Sweeper"
              Target="[System64Folder]msiexec.exe"
              Arguments="/x [ProductCode]"
              Description="Uninstalls Consensus Sweeper"

              >
          <Icon  Id="MyAppUninstallShortCutIcon" SourceFile="Consensus_128.ico"/>

        </Shortcut>
        <RegistryValue Root="HKCU" Key="Software\Vizitech\ConsensusSweeper"
                  Name="installed" Type="integer" Value="1" KeyPath="yes" />

        <RemoveFolder Id="ProgramMenuSubfolder" On="uninstall"/>
        <RemoveFolder Id="INSTALLFOLDER" On="uninstall"/>
      </Component>
     </Directory>
  </Directory>

以下是 Bootstrapper 项目中 Bundle.wxs 的代码:
    <Bundle Name="Consensus Sweeper" Version="1.0.0.2"
            UpgradeCode="PUT-GUID-HERE"
            IconSourceFile="$(var.SolutionDir)Libs\Resources\Consensus_128.ico">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" >
  <bal:WixStandardBootstrapperApplication LicenseFile="License.rtf"
        LogoFile="FTB.bmp" LogoSideFile="FTB.bmp" />

</BootstrapperApplicationRef>

    <Chain>
  <PackageGroupRef Id="NetFx45Web"/>
  <MsiPackage Id="MyApplication" SourceFile="$(var.ConsensusSweeper.TargetPath)"
              Visible="no">
    <MsiProperty Name="ALLUSERS" Value="1"></MsiProperty>

  </MsiPackage>
    </Chain>
</Bundle>

最佳答案

<Component Id="ApplicationShortcut" Guid="*">
    <CreateFolder/>
    <Shortcut Id="ApplicationStartMenuShortcut"
              Name="Consenus Sweeper" Description="Consensus"/>

    <Shortcut Id="UninstallProduct"
              Name="Uninstall My Application"
              Target="[System64Folder]msiexec.exe"
              Arguments="/x [ProductCode]"
              Description="Uninstalls Consensus Sweeper"/>
    <RemoveFolder Id="ProgramMenuSubfolder" On="uninstall"/>
</Component>

还要添加到您的 Feature 元素:
<ComponentRef Id="ApplicationShortcut" />

10-07 12:25