使用Wix 3.8,使用Bundle如何在卸载程序打包到exe安装程序中时卸载ExePackage?

时间:2017-07-14 14:49:18

标签: c# wix

我已经在StackOverflow上查看了几个答案,我无法找到解决我目前面临的问题所需的确切内容

我正在使用Wix 3.8和Visual Studio 2008,并且创建了一个XML部署项目,Bundle.wxs文件看起来像这样。

这是我的Bundle.wxs文件

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" 
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" >

    <Bundle Name="SomeCompanyBundle"
          Version="1.0.0.0"
          Manufacturer="Some Company"
          UpgradeCode="348d9d7c-6a37-44cd-8054-61b97777b5bd" 
          IconSourceFile="..\Some Company\logo_64.ico">

    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" >
      <bal:WixStandardBootstrapperApplication 
        LicenseFile="..\Some Company\license-agreement.rtf"
        LogoFile="..\Some Company\logo_64.png" />
    </BootstrapperApplicationRef>

        <Chain>
            <!-- TODO: Define the list of chained packages. -->
      <ExePackage Id="EXE_UsbDriversInstallerExe"
                  DisplayName="Driver Installer Executable" 
                  Compressed="yes"
                  Cache="yes"
                  PerMachine="yes"
                  Permanent="no"
                  Vital="yes"
                  SourceFile="..\Some Company\Drivers-Installer.exe"
                  InstallCommand="/SILENT=YES"
                  />


        <!-- More MsiPackages are used in real Bundle.wxs, but they aren't included in this question, because they are working on install and uninstall -->
    </Chain>
    </Bundle>
</Wix>

这将创建一个名为SomeCompanyBundle.exe

的Bundle安装文件

我可以通过命令提示符安装此捆绑包,例如SomeCompanyBundle.exe / quiet / install即不显示安装GUI。

我遇到的问题是卸载,这是由于Drivers-Installer.exe提供的命令行选项有限(这是来自第三方公司的旧的installer.exe文件,不存在)

唯一可用的选项是SILENT =(YES / NO)或LANG =(ENGLISH,SPANISH ....)。

此Drivers-Installer.exe不允许卸载操作。它有一个捆绑在Drivers-Installer.exe中的Uninstall.exe程序,只有在成功安装Drivers-Installer.exe后才能使用此Uninstall.exe

Uninstall.exe一旦安装,始终位于完整路径c:\ Program Files(x 86)\ SomeThirdPartyCompany \ Drivers-Installed \ Uninstall.exe

当我在使用命令提示符运行SomeCompanyBundle.exe / quiet / uninstall时需要卸载SomeCompanyBundle.exe时,如何运行此Uninstall.exe

我尝试的解决方案是:

1)UninstallCommand =“SILENT = YES”----由于上述原因,无法正常工作。

2)CustomAction -----对如何在Bundle卸载操作上运行Uninstall.exe感到困惑。

3)使用uil:DirectorySearch和util:RegistrySearch。我再次对如何在Bundle卸载操作上运行Uninstall.exe感到困惑。

任何有关示例/解释的帮助都将受到赞赏。

提前干杯。

1 个答案:

答案 0 :(得分:1)

这是一个有趣的方法,你可以做到这一点。我做了类似的安装,安装后,在您运行的系统上的某个位置放置“uninstall.exe”以卸载产品。

使用util:FileSearch查看该产品是否已安装。

    Private Sub CommandButton1_Click()
    Dim i As Integer
    For i = 1 To Range("CountofResponses")
    Range("D1").Offset(i-1,0).Select
    Selection.Copy

       Range("A" & 1 + i).Select
       'or you could use Range("A1").offset(i-1,0).Select
       ActiveSheet.Paste
    Next i
    End Sub

您还应该向EXE_UsbDriversInstallerExe <util:FileSearch Id="UsbDriversDirSearch" Path="[ProgramFilesFolder]\SomeThirdPartyCompany\Drivers-Installed\Uninstall.exe" Result="exists" Variable="UsbDriversInstalled" /> 添加DetectCondition="UsbDriversInstalled = 1"这将阻止您尝试双重安装此产品。

创建第二个<ExePackage>

<ExePackage>

现在您将始终安装Uninstall.exe,并且可以在卸载捆绑包时卸载此ExePackage,因为它具有UninstallCommand。