iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
Software Development

@30天 | C# WixToolset + WPF 帥到不行的安裝包系列 第 6

@Day6 | C# WixToolset + WPF 帥到不行的安裝包 [自訂頁面-官方UI頁面結構]

  • 分享至 

  • xImage
  •  

如果

今天想要用 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


上一篇
@Day5 | C# WixToolset + WPF 帥到不行的安裝包 [變更UI預設介面]
下一篇
@Day7 | C# WixToolset + WPF 帥到不行的安裝包 [自訂頁面-增加自訂頁面]
系列文
@30天 | C# WixToolset + WPF 帥到不行的安裝包30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言