安裝、刪除、修復的系統介接後,
那我們如果想從已經安裝好的系統做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