admin 发表于 2017-4-8 14:09:03

在WiX 3中添加和自定义对话框3

添加对用户界面的支持如果您正在使用Visual Studio集成,请右键单击安装项目的“参考”文件夹,然后添加WixUIExtension.dll文件作为参考。您还应该转到项目的属性(右键单击解决方案资源管理器中的项目名称,然后选择“属性”),转到“链接器”选项卡,并在“文化:”旁边的编辑控件中输入“en-US” “(没有引号)。
如果您使用WiX命令行,则需要在light.exe命令行中指定以下内容:
-cultures:en-US -ext WixUIExtension.dll
如果light.exe找不到它,您可能需要指定WixUIExtension.dll的路径。

选择用户界面维克斯3提供了五个基本的用户界面风格:WixUI_Mondo,WixUI_FeatureTree,WixUI_InstallDir,WixUI_Minimal,和WixUI_Advanced。有关这些差异的信息很容易找到,并且包含在WiX帮助文件中。这个例子将集中在一WixUI_Installer组对话框上,但可以轻松地适应其他的样式。要将WixUI_Installer用户界面(或WiX对话框设置)添加到设置中,请在安装文件的主安装级别(...元素块内)中添加以下元素:
<Property Id =“WIXUI_INSTALLDIR”Value =“ INSTALLDIR ”/>
<UIRef Id =“WixUI_InstallDir”/>
注意<;Property>元素。这对于WixUI_InstallDir用户界面是必需的,INSTALLDIR值应该替换为要安装主应用程序的元素的ID 。
添加元素并与WixUIExtension库链接后,安装程序应具有所选的用户界面。
如果您在使用Visual Studio构建设置时遇到问题,请确保已在链接器设置中指定了文化。还可以右键单击项目名称并选择“重建全部”。如果您仍然遇到问题,请尝试关闭并重新启动Visual Studio,重新打开安装项目,然后重新构建全部。如果您仍然遇到问题,WiX SourceForge页面有一些很好的支持邮件列表,您可以搜索或加入。

添加复选框以有条件地安装桌面快捷方式通过添加复选框来自定义对话框并不复杂。此示例将使用WixUI_InstallDir用户界面,并将在对话框中添加一个复选框,使用户有机会更改安装目录。扩展这个例子来定制另一个对话框系列中的另一个对话框应该是直截了当的。
不要担心 - 您不必重新编译WiX,但您需要下载您正在使用的WiX版本的源代码。对于这个例子,您需要将两个文件从WiX源代码树中复制到您自己的安装项目目录中: WixUI_InstallDir.wxs和InstallDirDlg.wxs。一旦在自己的目录,重命名这些文件MyWixUI_InstallDir.wxs和MyInstallDirDlg.wxs分别。
首先,您需要一个属性来指示是否在桌面上放置快捷方式。将以下代码添加到您的安装文件中,与元素的级别相同(属性名称在所有大写中非常重要 - 这表示它是全局属性):
<Property Id =“INSTALLDESKTOPSHORTCUT”Value =“1”/>
您还需要一个组件部分来有条件地根据INSTALLDESKTOPSHORTCUT属性的值放置快捷方式。如果您已经有一个单独的组件安装快捷方式,您可以简单地添加条件。否则,您的代码可能如下所示(将突出显示的部分替换为适合安装的部分):
<Directory Id =“DesktopFolder”Name =“Desktop”>
    <Component Id =“DesktopShortcut”Guid =“ YOUR-GUID-HERE ”>
    <条件> INSTALLDESKTOPSHORTCUT </ Condition>
    <RegistryKey Root =“HKCU”Key =“ YourAppKey \ PossibleSubKey ”Action =“createAndRemoveOnUninstall”>
      <RegistryValue Name =“ AnyValueName ”Value =“1”Type =“integer”KeyPath =“yes”/>
    </ RegistryKey>
    <Shortcut Id =“DesktopShortcut”Directory =“DesktopFolder”Name =“ ShortcutName ”ShortName =“ ShrtName ”Icon =“ YourApp.exe ”Target =“[#YourAppExeId ]”/>
    </ Component>
</ Directory>
当然,您还需要在应用程序的元素中添加相应的元素。
现在,您将有一个基于INSTALLDESKTOPSHORTCUT属性的值来安装的快捷方式。现在我们需要将复选框添加到目录对话框中。加载您的MyInstallDirDlg.wxs副本并进行以下更改:
<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright (c) Microsoft Corporation.All rights reserved.
-->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
      <UI>
            <Dialog Id="MyInstallDirDlg" Width="370" Height="270" Title="!(loc.InstallDirDlg_Title)">
                .
                .
                .
                <Control Id="FolderLabel" Type="Text" X="20" Y="60" Width="290" Height="30" Text="!(loc.InstallDirDlgFolderLabel)" />
                <Control Id="Folder" Type="PathEdit" X="20" Y="100" Width="320" Height="18" Property="WIXUI_INSTALLDIR" Indirect="yes" />
                <Control Id="ChangeFolder" Type="PushButton" X="20" Y="120" Width="56" Height="17" Text="!(loc.InstallDirDlgChange)" />
                <Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="20" Y="160" Width="290" Height="17" Property="INSTALLDESKTOPSHORTCUT" CheckBoxValue="1" Text="Create a shortcut for this program on the desktop." />
            </Dialog>
      </UI>
    </Fragment>
</Wix>
还需要进行两次更改。您需要更改MyWixUI_InstallDir.wxs文件以使用新的MyInstallDirDlg。加载您的MyWixUI_InstallDir.wxs副本并进行以下更改:
<?xml version="1.0" encoding="UTF-8"?>

<!--
    Copyright (c) Microsoft Corporation.All rights reserved.
-->
<!--
First-time install dialog sequence:      Maintenance dialog sequence:
- WixUI_WelcomeDlg                     - WixUI_MaintenanceWelcomeDlg
- WixUI_LicenseAgreementDlg            - WixUI_MaintenanceTypeDlg
- WixUI_InstallDirDlg                  - WixUI_InstallDirDlg
   - WixUI_VerifyReadyDlg               - WixUI_VerifyReadyDlg
   - WixUI_DiskCostDlg
-->

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
      <UI Id="MyWixUI_InstallDir">
            .
            .
            .
            <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
            <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="MyInstallDirDlg">LicenseAccepted = "1"</Publish>

            <Publish Dialog="MyInstallDirDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
            <Publish Dialog="MyInstallDirDlg" Control="Next" Event="SetTargetPath" Value="" Order="1">1</Publish>
            <Publish Dialog="MyInstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="2">1</Publish>
            <Publish Dialog="MyInstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="" Order="1">1</Publish>
            <Publish Dialog="MyInstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>

            <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MyInstallDirDlg" Order="1">NOT Installed</Publish>
            <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed</Publish>
            .
            .
            .
            </UI>

      <UIRef Id="WixUI_Common" />
    </Fragment>
</Wix>
您还需要更新先前在安装文件的主安装级别(...元素块内)中添加的元素,以便它指向您的新对话框:
<UIRef Id =“ 我的 WixUI_InstallDir”/>
现在,将MyWixUI_InstallDir.wxs和MyInstallDirDlg.wxs文件添加到您的安装项目中,进行编译,而您的新安装目录对话框应如下所示:

而如果勾选这个复选框,桌面快捷方式才会被添加!


安装后有条件地启动应用程序
有两种方法可以在安装的最终页面中添加一个复选框,以有条件地启动应用程序。第一个在WiX 3中得到支持,而不需要对原始对话框进行任何更改,但它有一个主要的限制。
最后的对话框(ExitDialog)有一个可选的复选框,可以显示,并且可以使用绑定到该复选框的属性来有条件地启动应用程序。安装文件中的以下条目将添加此复选框(再次,用您自己的条目替换黄色条目):
<CustomAction Id="StartAppOnExit" FileKey="YourAppExeId" ExeCommand="" Execute="immediate" Impersonate="yes" Return="asyncNoWait" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch Sample App 1.0 when setup exits." />
<UI>
    <Publish Dialog="ExitDialog" Control="Finish" Order="1" Event="DoAction" Value="StartAppOnExit">WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT</Publish>
</UI>
上面的代码将添加以下复选框到ExitDialog:

注意复选框后面的灰色背景。不幸的是,没有一个简单的方法可以解决这个问题,而无需将其固定在WiX源代码中。因为控件的背景使用默认的对话框背景颜色,更改匹配的对话框的背景图像将不会真正解决任何事情。它仍然会在不同版本的Windows上使用其他默认背景颜色,以及更改其Windows配色方案的用户的计算机上。
添加复选框和有条件地启动应用程序的另一种方法是创建一个新的复选框控件,就像我们为桌面快捷方式所做的那样。如果您添加桌面快捷方式复选框,那么你已经拥有的副本WixUI_InstallDir.wxs在安装项目命名MyWixUI_InstallDir.wxs。您还需要将ExitDialog.wxs复制到项目目录中,并将其重命名为MyExitDialog.wxs。然后对文件进行以下更改:
<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright (c) Microsoft Corporation.All rights reserved.
-->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
      <UI>
            <Dialog Id="MyExitDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)">
                <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.WixUIFinish)" />
                <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUICancel)" />
                <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="!(loc.ExitDialogBitmap)" />
                <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUIBack)" />
                <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
                <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes" Text="!(loc.ExitDialogDescription)" />
                <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.ExitDialogTitle)" />
                <Control Id="OptionalText" Type="Text" X="135" Y="100" Width="220" Height="80" Transparent="yes" NoPrefix="yes" Hidden="yes" Text="">
                  <Condition Action="show">WIXUI_EXITDIALOGOPTIONALTEXT AND NOT Installed</Condition>
                </Control>
                <Control Id="OptionalCheckBox" Type="CheckBox" X="135" Y="190" Width="220" Height="40" Hidden="yes" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="">
                  <Condition Action="show">WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed</Condition>
                </Control>
                <Control Id="LaunchCheckBox" Type="CheckBox" X="10" Y="243" Width="170" Height="17" Property="LAUNCHAPPONEXIT" Hidden="yes" CheckBoxValue="1" Text="Launch Sample App 1.0 when setup exits.">
                  <Condition Action="show">NOT Installed</Condition>
                </Control>
            </Dialog>

            <InstallUISequence>
                <Show Dialog="MyExitDialog" OnExit="success" />
            </InstallUISequence>

            <AdminUISequence>
                <Show Dialog="MyExitDialog" OnExit="success" />
            </AdminUISequence>
      </UI>
    </Fragment>
</Wix>
您还需要对MyWixUI_InstallDir.wxs文件进行以下更改:
<Publish Dialog =“ 我的退出对话框”Control =“Finish”Event =“EndDialog”Value =“Return”Order =“999”> 1 </ Publish>
将新的MyExitDialog.wxs文件添加到您的项目中,而不是在白色背景上的上述灰色复选框,您将最终得到以下结果:

最后,要使应用程序实际启动,您需要添加与上一个选项相似的代码,将突出显示的部分替换为您的设置是有意义的:
<CustomAction Id =“LaunchApplication”FileKey =“ YourAppExeId ”ExeCommand =“”Execute =“immediate”Impersonate =“yes”Return =“asyncNoWait”/>
<UI>
<Publish Dialog =“MyExitDialog”Control =“Finish”Order =“1”Event =“DoAction”Value =“LaunchApplication”> LAUNCHAPPONEXIT </ Publish>
</ UI>
页: [1]
查看完整版本: 在WiX 3中添加和自定义对话框3