iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
Software Development

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

@Day29 | C# WixToolset + WPF 帥到不行的安裝包 [如何拿已經安裝好的資料]

系統做好

安裝、刪除、修復的系統介接後,

那我們如果想從已經安裝好的系統做appsetting的修改,
可能有些人就直接去appsetting 改了,

那如果我們不要這樣子了話,
WixToolset有沒有取得已安裝好的位置,讓我們去讀取資料勒….

很可惜WixToolset 只有判斷這個程式有沒有安裝了,
他不會抓這個程式安裝在哪邊,

所以我能想到的方式是,
建立我們系統機碼,然後設定位置參數在機碼內,


我們實做看看!
先在原本的
DemoUse.Installer 專案> Product.wxs 內
放入註冊機碼的位置

          <!--在機碼註冊安裝位置-->
          <Component Id="cmpB59C44B238E764B86C6DFC0A8045E3FB" Guid="*">
            <RegistryKey Id='ChessInfoBarInstallDir' Root='HKLM' Key='Software\[Manufacturer]\[ProductName]' Action='createAndRemoveOnUninstall'>
              <RegistryValue Type='string' Name='InstallDir' Value="[INSTALLFOLDER]" Action="write" KeyPath="yes" />
            </RegistryKey>
          </Component>

我建立一個在 HKLM (HKEY_LOCAL_MACHINE)
key 位置在 SOFTWARE\Demo\DemoUse.Installer
記得上面也必須註冊

然後我們安裝完後,到Regedit

實際上他會在 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Demo\DemoUse.Installer
多了一層 WOW6432Node
主要我們程式為32 bit

那我們在GetLocalData額外加入一個取得這個機碼資料的方法

		/// <summary>
        /// 取得機碼路徑
        /// </summary>
        /// <returns></returns>
        public string GetPathRegistryKey()
        {
            string result = string.Empty;
            var key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Demo\\DemoUse.Installer", false);
            if (key is null)
            {
                key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Demo\\DemoUse.Installer", false);
            }
            if (key != null)
            {
                result = key.GetValue("InstallDir").ToString();
            }
            return result;
        }

這樣就能取得機碼資料了

有路徑位置,總知道該怎麼做了吧!!



  • 後記

在做這個部分時,配合之前講的系統更新,
如果系統更新的時候,我們的自訂動作

例如sql連線字串的設定會直接大砍不見,值也會跟著不見,
所以可以在做更新前,先將這些值給先記錄下來,然後再重新輸入進安裝。

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


上一篇
@Day28 | C# WixToolset + WPF 帥到不行的安裝包 [改版本號碼卻跳出舊版本]
下一篇
@Day30 | C# WixToolset + WPF 帥到不行的安裝包 [最終回]
系列文
@30天 | C# WixToolset + WPF 帥到不行的安裝包30

尚未有邦友留言

立即登入留言