WiX:当用Burn / EXE包装时,如何显示MSI的对话框?

时间:2013-06-28 21:52:20

标签: wix windows-installer burn

我有一个MSI及其对话框,提示用户[1]浏览安装目录,[2]接受EULA,[3]安装完成后启动应用程序。

我将MSI包装在Burn Bundle中以制作EXE。现在,我看到的只是EXE对EULA的提示,但没有提示选择安装目录,或启动应用程序。

我想使用EXE格式,因为客户了解它,我可以关联我的图标并在EXE中嵌入我的版本号,并提示输入管理员密码。客户将我的软件下载为单个可执行文件。

这是代码:

<WixVariable Id="WixStdbaLogo" Value="MyIcon.ico" />
<Variable Name="InstallFolder" Type="string" Value="[ProgramFilesFolder]MyCompany\MyProduct"/>
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<WixVariable Id="WixStdbaLicenseRtf" Value="MyLicense.rtf" />

<Chain>
    <MsiPackage
      Id="Setup"
      Compressed="yes"
      SourceFile="MyProduct.msi"
      Vital="yes"
      DisplayInternalUI="yes"
      EnableFeatureSelection="yes"
      >
        <MsiProperty Name="INSTALLLOCATION" Value="[InstallFolder]" />
    </MsiPackage>
</Chain>

“DisplayInternalUI =”是“选项似乎没有按照我的意愿行事。”EnableFeatureSelection“无论是或否都没有区别。

如何显示MSI对话框?或者,如何让Burn生成的EXE提示安装目录和应用程序启动?

我正在使用WiX 3.7.1224,VS 2010.

我查看了以下来源:

这是MSI(6月30日13:07 AST添加):

<Product Id="*" Name="My Product" Language="1033" Version="5.0.0" 
     Manufacturer="My Company" UpgradeCode="0bd6d4cf-d23d-431a-9baf-c72cb0525f0c">
  <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

  <MajorUpgrade DowngradeErrorMessage="A newer version of My Program is already installed." />
  <MediaTemplate EmbedCab="yes" CompressionLevel="high"/>

  <Feature Id="ProductFeature" Title="My Product" Level="1">
    <ComponentGroupRef Id="ProductComponents" />
  </Feature>

  <!-- Set Installer's Icon in Add/Remove Programs -->
  <Icon Id="icon.ico" SourceFile="MyProduct.ico"/>
  <Property Id="ARPPRODUCTICON" Value="icon.ico" />

  <Property Id="ProductSeed"> 3022 </Property> 
  <Binary Id="PlantSeedDLL" SourceFile="..\..\PlantSeed\Release\PlantSeed.DLL" />
  <CustomAction Id="DLLPlantSeed" BinaryKey="PlantSeedDLL" DllEntry="PlantSeedFunc"
    Execute="immediate" Return="check" HideTarget="no" Impersonate="yes"/>

  <!-- Step 1: Define the directory structure -->
  <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
      <Directory Id="INSTALLFOLDER" Name="My Product"/>
    </Directory>
    <!-- Shortcut on Start Menu -->
    <Directory Id="ProgramMenuFolder">
      <Directory Id="ApplicationProgramsFolder" Name="My Product"/>
    </Directory>
    <!-- Desktop shortcut -->
    <Directory Id="DesktopFolder" Name="Desktop">
    </Directory>
  </Directory>

  <CustomAction Id="Install_PDF_printer" FileKey="Install.exe"
    ExeCommand='Install.exe -s "My PDF Printer" -n "My Company Inc." -c "****************"'
    Execute="deferred" Return="check" HideTarget="no" Impersonate="no" />

  <!-- Banner images -->
  <!-- <WixVariable Id="MainLogoBmp" Value="Resources/Images/weblabel.jpg" /> -->
  <WixVariable Id="WixUIBannerBmp" Value="MyProduct iconWiXbanner.jpg" /> <!-- 493 × 58 -->
  <WixVariable Id="WixUIDialogBmp" Value="MyProduct 616x390.jpg" /> <!-- 616 × 390 -->

  <!-- License (not necessary to have it as a component) -->
  <WixVariable Id="WixUILicenseRtf" Value="MyProduct License.rtf" />

  <!-- Prompt for install directory -->
  <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
  <UIRef Id="WixUI_InstallDir" />

  <!-- Display checkbox Prompt to run EXE at end -->
  <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1"/> <!-- Default to checked -->
  <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Product" />
  <Property Id="WixShellExecTarget" Value="[#MyProduct.exe]" />
  <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

  <!-- Prompt to run EXE at end -->
  <UI>
    <UIRef Id="WixUI_FeatureTree"/> <!-- causes compilation errors -->
    <Publish Dialog="ExitDialog"
      Control="Finish"
      Event="DoAction"
      Value="LaunchApplication">
      WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed
    </Publish>
  </UI>

  <UI> <!-- For the dialogs -->
    <TextStyle Id="Font10" FaceName="Tahoma" Size="10" Red="0" Green="0" Blue="0"  />
    <TextStyle Id="Font12" FaceName="Tahoma" Size="12" Red="0" Green="0" Blue="0"  />
  </UI>

  <!-- Include dialogs -->
  <Property Id="ApplicationFolderName" Value="MyProduct Folder" /> <!-- WixUI_Advanced -->
  <Property Id="WixAppFolder" Value="WixPerMachineFolder" /> <!-- WixUI_Advanced -->
  <!-- Install for all users -->
  <WixVariable Id="WixUISupportPerUser" Value="0" /> <!-- WixUI_Advanced -->

  <!-- Write product key in Registry -->
  <DirectoryRef Id="TARGETDIR">
    <Component Id="RegistryEntries" Guid="*">
    <!-- HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\My Company Inc.\My Product -->
    <RegistryKey Root="HKLM"  
           Key="Software\My Company Inc.\My Product" >
      <RegistryValue Type="string" Name="TARGET" Value="[INSTALLFOLDER]"/>
    </RegistryKey>
    </Component>
  </DirectoryRef>

    <!-- Shortcut on Start Menu -->
  <DirectoryRef Id="ApplicationProgramsFolder">
    <Component Id="ApplicationShortcut" Guid="*">
      <Shortcut Id="ApplicationStartMenuShortcut"
        Name="My Product"
        Description="My Product"
        Target="[INSTALLFOLDER]MyProduct.exe"
        WorkingDirectory="INSTALLFOLDER"
      />
      <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
      <RegistryValue Root="HKCU" Key="Software\Microsoft\My Product" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
    </Component>
  </DirectoryRef>

  <!-- Step 2: Add files to your installer package -->
  <DirectoryRef Id="INSTALLFOLDER">

    <Component Id="MyProduct.exe" Guid="*">
      <File Id="MyProduct.exe" Name="MyProduct.exe"
        Source="..\\..\\Release\\MyProduct.exe"
        KeyPath="yes" Checksum="yes">

        <!-- Desktop shortcut -->
        <Shortcut Advertise="yes"
          Id="MyProductDesktopShortcut"
          Directory="DesktopFolder"
          Name="My Product"
          WorkingDirectory="INSTALLFOLDER"
          Description="My Product"
          Icon="MyProduct.ico">
          <Icon Id="MyProduct.ico" SourceFile="MyProduct.ico" />
        </Shortcut>
      </File>
    </Component>

    <Component Id="MyProduct.chm" Guid="*">
      <File Id="MyProduct.chm" Source="MyProduct.chm" KeyPath="yes" Checksum="yes"/>
    </Component>
    <Component Id="MyProduct.bmp" Guid="*">
      <File Id="MyProduct.bmp" Source="MyProduct.bmp" KeyPath="yes" Checksum="yes"/>
    </Component>
    <Component Id="MyProduct.ico" Guid="*">
      <File Id="MyProduct.ico" Source="MyProduct.ico" KeyPath="yes" Checksum="yes"/>
    </Component>

    <!-- Many, many more components... -->
  </DirectoryRef>

  <!-- Step 3: Tell WiX to install the files -->
  <Feature Id="MainApplication" Title="Main Application" Level="1">
    <ComponentRef Id="MyProduct.exe" />
    <ComponentRef Id="MyProduct.bmp" />
    <ComponentRef Id="MyProduct.ico" />
    <ComponentRef Id="MyProduct.chm" />

    <ComponentRef Id="ApplicationShortcut" />

    <ComponentRef Id="RegistryEntries" /> <!-- Registry entry -->
  </Feature>

  <InstallExecuteSequence>
    <!-- Before="InstallFinalize" -->
    <Custom Action="Install_PDF_printer" After="InstallFiles" />
  </InstallExecuteSequence>

  <!-- Calculate Trial Expiry date, write to Registry -->
  <InstallExecuteSequence>
    <Custom Action="DLLPlantSeed" After="InstallFiles" />
  </InstallExecuteSequence>  
</Product>

<Fragment>
  <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
    <!-- TODO: Remove the comments around this Component element 
      and the ComponentRef below in order to add resources to this installer. -->
    <!-- <Component Id="ProductComponent"> -->
      <!-- TODO: Insert files, registry keys, and other resources here. -->
    <!-- </Component> -->
  </ComponentGroup>
</Fragment>

3 个答案:

答案 0 :(得分:1)

反之亦然:在MSI中尝试supress WIX ExitDlg,然后离开BA对话框。

答案 1 :(得分:1)

Just add the compile 'com.facebook.android:facebook-android-sdk:[4,5)' tag.

Error:Execution failed for task ':app:processDebugManifest'.

答案 2 :(得分:0)

令人费解的是,这件事似乎现在正在发挥作用。我无法分辨出多种排列中的哪一种“固定”了它。我想到的唯一事情就是每次都需要重建MSI项目,以及包含它的Bootstrapper Application(BA)。

现在我需要禁止BA显示的“设置成功”对话框。它是多余的,因为MSI对话框说的是同样的事情。