WiX: Как я могу отобразить диалоги MSI, когда они помещены в Burn/EXE?
У меня есть 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 =" yes", кажется, не делает то, что я хочу. " EnableFeatureSelection " не имеет значения, является ли это да или нет.
Как мне получить диалоги MSI для отображения? В качестве альтернативы, как я могу получить созданный Burn файл EXE для запроса установки каталога и запуска приложения?
Я использую WiX 3.7.1224, VS 2010.
Я посмотрел на следующие источники:
- WiX.chm
- Учебное пособие по WiX ( http://wix.tramontana.co.hu/tutorial)
- SourceForge ( http://wix.sourceforge.net/index.html)
- Радость установки ( http://www.joyofsetup.com/)
- WiX Toolset, OuterCurve ( http://wixtoolset.org/)
- Форум пользователей WiX ( http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/)
- Диззи Монки ( http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/)
Вот MSI (добавлено 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 ответа
Просто добавьте DisplayInternalUI
тег.
<MsiPackage SourceFile = 'xxx' Id='xxx' Vital='yes' DisplayInternalUI='yes'></MsiPackage>
И наоборот: попробуйте подавить WIX ExitDlg в MSI
и оставь свой BA
Диалог.
Необъяснимо, что, похоже, сейчас все работает. Я не могу понять, какая из множества перестановок "исправила" это. Единственное, что приходит на ум, - это то, что проект MSI нужно каждый раз перестраивать, а также приложение Bootstrapper (BA), которое его окружает.
Теперь мне нужно отключить диалоговое окно "Установка выполнена успешно", отображаемое БА. Это избыточно, поскольку диалог MSI говорит то же самое.