iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
Software Development

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

@Day10 | C# WixToolset + WPF 帥到不行的安裝包 [自訂動作介接畫面-安裝前執行]

  • 分享至 

  • xImage
  •  

安裝前

要執行的動作

昨天有講到安裝後的執行動作,那安裝之前要執行的動作勒?!
ex 我想先偵測出本機的IP再帶入進安裝包的 SYSTEMIP。


我們先在CustomAction額外建立一個取得本機IP的GetThisIP方法

[CustomAction]
public static ActionResult GetThisIP(Session session) 
{
   string name = Dns.GetHostName();
   var ip = Dns.GetHostEntry(name).AddressList
            .ToList()
            .Where(o => o.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork && !o.ToString().EndsWith(".1"))
            .FirstOrDefault()?.ToString() ?? "127.0.0.1";
   session["SYSTEMIP"] = ip;
   return ActionResult.Success;
}

依昨天的流程建立起來

<CustomAction Id="GetIP" BinaryKey="SettingCADLL" DllEntry="GetThisIP" Execute="immediate" Return="check" />

而啟用時機使用LaunchConditions

google翻譯...哈哈哈
比較好聽我覺得應該叫 啟動後執行

<InstallExecuteSequence>
   <Custom Action="GetIP" After="LaunchConditions" Overridable="yes">NOT Installed</Custom>
   <Custom Action="SetURL" After="InstallFinalize" Overridable="yes">NOT Installed</Custom>
</InstallExecuteSequence>

建置後執行

到這邊的時候,System IP 還會是預設值127.0.0.1...

後來各種爬文才知道有另一個引用方法,使用InstallUISequence
所以我們建立這個標籤並將我們這段程式碼移到這裡面來。

<InstallUISequence>
   <Custom Action="GetIP"  After="LaunchConditions" Overridable="yes">NOT Installed</Custom>
</InstallUISequence>

Try!



  • 後記

其實我這邊很難想像到要用帶有UI的字眼InstallUISequenc可以執行,
嘗試過了才恍然大悟,喔~要用這個才行阿0.0

Day10程式碼
https://github.com/Aslan7826/defaultMVC/commits/Day10


上一篇
@Day9 | C# WixToolset + WPF 帥到不行的安裝包 [自訂動作介接畫面-安裝後執行]
下一篇
@Day11 | C# WixToolset + WPF 帥到不行的安裝包 [分離Product.wxs]
系列文
@30天 | C# WixToolset + WPF 帥到不行的安裝包30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言