@Day6 | C# WixToolset + WPF 帅到不行的安装包 [自订页面-官方UI页面结构]

如果

今天想要用 WixToolset 去做自订的页面了话 (ex:我们要设定系统要修改HelloWorld内的 appsettings.json 某段连接

接下来会谈到3个部分

1.画面部分
2.自订动作
3.自订动作介接画面
这会花几天来介绍


首先来讲画面部分,昨天的页面使用WixUI_InstallDir,
我们现在要对目前的安装包增加系统设定值的页面,
所以我们要拆解并知道WixUI_InstallDir里面的构造,
才能加入其他的页面。

我们从官方的Github内
https://github.com/wixtoolset/wix3/blob/develop/src/ext/UIExtension/wixlib
寻找WixUI_InstallDir.wxs

 <UI Id="WixUI_InstallDir">
    <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
    <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
    <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />

    <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
    <Property Id="WixUI_Mode" Value="InstallDir" />

    <DialogRef Id="BrowseDlg" />
    <DialogRef Id="DiskCostDlg" />
    <DialogRef Id="ErrorDlg" />
    <DialogRef Id="FatalError" />
    <DialogRef Id="FilesInUse" />
    <DialogRef Id="MsiRMFilesInUse" />
    <DialogRef Id="PrepareDlg" />
    <DialogRef Id="ProgressDlg" />
    <DialogRef Id="ResumeDlg" />
    <DialogRef Id="UserExit" />
            
    <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish>
    <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>

    <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>

    <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed</Publish>
    <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>

    <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
    <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">LicenseAccepted = "1"</Publish>

    <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
    <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
    <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
    <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
    <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
    <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
    <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
            
    <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1">NOT Installed</Publish>
    <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
    <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>

    <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>

    <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
    <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
    <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>

    <Property Id="ARPNOMODIFY" Value="1" />
</UI>

<UIRef Id="WixUI_Common" />

我们将这段程序码替换到我们昨天的安装包上的
这段程序码就好 ↓↓↓

<UI> <UIRef Id="WixUI_InstallDir" /></UI>

而WIXUI_INSTALLDIR参数指定的部分还需要保留 ↓↓↓ 别删掉了!否则会出错给你看

<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />

建置後,可以发现跟昨天安装包安装顺序是一样的!!!


再来我们了解一下这框架。

  1. 页面注册部分
    这个是目前 WIXUI_INSTALLDIR有使用到的页面。
  2. 页面顺序
    除了BrowseDlg 浏览框 ExitDialog离开框以外
    我们可以看到基本顺序WelcomeDlg > LicenseAgreementDlg > InstallDirDlg> VerifyReadyDlg
    对应上我们 Day5的看的安装包页面顺序是一样的



而关键字 Control="Back":上一页, Control="Next":下一页
使用Value去衔接上下页的页面名称。

order 了话则是执行的顺序,你可以看到预设InstallDirDlg的next下了很多动作

<Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
<Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
<Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>

内容如果是1的,就是一定会显示的意思,
至於LicenseAccepted = "1" 或
CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"
这些已经写好的语法...我个人是这麽认为的

要就要google了,
哈哈,我们先跳过不看他!!!

还想了解详细的元件介绍需要看官方介绍,
https://wixtoolset.org/documentation/manual/v3/xsd/wix/publish.html
或者参考 stoneniqiu
https://www.cnblogs.com/stoneniqiu/p/3363873.html



  • 後记

我参考的文章是很久前写的,
WixToolset 後来将原始码都转到github上面,
今年看时文章内的前往网页就错了,
为了找原始码路径,也花了一阵子查...

有了 UI原始码後,
明天我们就能新增其他自订的页面,
然後加入了!!!

Day6程序码
https://github.com/Aslan7826/defaultMVC/commits/Day06


<<:  day6 : metric应用

>>:  D-24. attr_accessor 、类别变数与实体变数差异 && Minimum Moves to Equal Array Elements

Day16 requests模组一

终於!可以进入真正的爬虫教学啦~ 我们已经有一定的实力来编写Python和分析网页了 今天的影片内容...

应用 LINE Front-end Framework 轻松建立互动 (1)

我们的验证码小帮手现在可以完成的项目有: 对使用者进行身份验证与绑定 判断使用者的讯息,进而回覆对应...

[第十四天]从0开始的UnityAR手机游戏开发-如何在辨识图卡时拨放影片03

在Project新增Create→C# Script取名为TrackableEvent 撰写程序码 ...

[前端暴龙机,Vue2.x 进化 Vue3 ] Day26. Vue3 Composition API 使用(二)

前一篇说到 该怎麽写 data 的资料,找回双向绑定机制 !!! 这边先小小的补充一下 XD 在 O...

{CMoney战斗营} 的第十周 #摇身一变的游戏风格

这是一个糊里糊涂忙碌的一周,游戏大抵已完成,剩下一些微调的部分,剪辑影片、制作海报, PPT、发表...