@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


<<:  [Day 15] Reactive Programming -Reactor(COLD VS HOT) -PART 2

>>:  Day14 开发套件 - 范例程序码介绍03 iOS 端

JavaScript入门 Day02_如何撰写

首先要写 JavaScript 肯定要有编辑器,Visual Studio Code 是个好选择 再...

Day 18 ( 中级 ) 地球绕着太阳转

地球绕着太阳转 教学原文参考:地球绕着太阳转 这篇文章会介绍,如何在 Scratch 3 里使用重复...

Android x Kotlin : 展开式列表ExpandableListView用法

简介 展开式的列表清单。 外部项目例如一般会员、忠诚会员...这些我们称为groupView, 每个...

Day29 vue.js网页 团队介绍 管理员功能

延续昨日 今天我们来实现 管理者帐号跟团队介绍 其实这两点应该可以同时执行 因为只有管理者可以新增跟...

Day 29 - Rancher Fleet Helm + Kustomize 应用程序部署

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...