iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
Software Development

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

@Day8 | C# WixToolset + WPF 帥到不行的安裝包 [自訂動作]

  • 分享至 

  • xImage
  •  

前兩天

已經建立好的自訂頁面,
現在我們要為這些頁面上Action,

而WixToolset有專門自訂動作的專案檔Custom Action Project for Wix v3

我們建立一個DemoUse.CustomAction專案

建立好了以後我們看CustomAction,我已經改成叫SetCustomAction了

其中傳入參數Session 就是由剛剛 WixToolset 內設定的自訂屬性,

目前可以使用的參數

1.SYSTEMIP -我們自訂頁面
2.WEBPORT -我們自訂頁面
3.INSTALLFOLDER -由選擇路徑頁面得到的

而抓取資料的方式就session["xxx"]這樣使用

var webPort = session["WEBPORT"];

假設我們要針對Json文字檔做編輯
網路上抓的文字檔撰寫

 public class TxtEditer
    {
        private string PATH;
        public TxtEditer(string path)
        {
            PATH = path;
        }

        /// <summary>
        /// 取得文字檔資料
        /// </summary>
        /// <returns></returns>
        public string GetTxtData()
        {
            var result = string.Empty;
            using (StreamReader reader = new StreamReader(PATH, System.Text.Encoding.Default))
            {
                result = reader.ReadToEnd();
            }
            return result;
        }
        /// <summary>
        /// 完全覆蓋文字檔
        /// </summary>
        /// <returns></returns>
        public void EditTxtData(string txt)
        {
            using (StreamWriter writer = new StreamWriter(PATH, false, System.Text.Encoding.Default))
            {
                writer.Write(txt);
            }
        }
    }

Json檔了話可以用Json套件,
懶的話直接轉JObject,
大略這樣寫….

[CustomAction]
public static ActionResult SetCustomAction(Session session)
{
    //可使用的參數
    var path = Path.Combine(session["INSTALLFOLDER"], "appsettings.json");
    var systemIP = session["SYSTEMIP"];
    var webPort = session["WEBPORT"];
           
    //編輯Json檔
    var txtEditer = new TxtEditer(path);
    string txt = txtEditer.GetTxtData();
    var config = JsonConvert.DeserializeObject<JObject>(txt);
    config["URL"] = $"{systemIP}:{webPort}";
    txt = JsonConvert.SerializeObject(config, Formatting.Indented);
    txtEditer.EditTxtData(txt);

    return ActionResult.Success;
}

確定後明天再來將他們結合在一起



  • 後記

這就考驗你各位的程式底子了
因為沒辦法直接使用F5,
而我是使用LINQPad在旁邊做輔助…嘿嘿

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


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

尚未有邦友留言

立即登入留言