首页 > 编程语言 >[编程笔记] 工具的升级逻辑

[编程笔记] 工具的升级逻辑

时间:2024-09-30 18:22:26浏览次数:7  
标签:文件 逻辑 exe 启动 编程 笔记 升级 更新 工具

    记得去年来这边时,曾面过一家公司,要做WPF项目,当时问到“如果让你做一个安装程序,如何实现更新?说下思路就行”,当时我回复的是文件有更新时从服务器下载最新dll,覆盖到本地目录即可。那个时候以为很简单,现在自己接触到以后,发现这里吗的细节还挺多,因此记录一番。

    从服务器下载最新文件更新到本地,这很简单,通过版本号控制也好,其他方式比较也好,实现起来不难。但是我说下我遇到的场景:工具改名!

    背景:xx年xx月xx日,工具【某工具A.exe】改名为【某工具B.exe】,客户自动升级以后,用不了了,一直重复升级。

               原因:工具每次启动时检测服务器版本号,如本地version < 线上version,则下载zip到本地进行覆盖更新,然后重新启动exe。

    上面这套升级逻辑用了很久,一直没有出过问题,直到8月份我改了工具的名字,问题就来了!

    重复升级的原因是【某工具A.exe】启动时下载新包,新包里是【某工具B.exe】,但是更新完毕后启动的还是【某工具A.exe】,所以一直重复升级。

    “聪明的朋友”可能很快就发现了,那我更新完毕以后启动【某工具B.exe】不就可以啦?yes!就是这样!...那么怎么写代码呢?

// 1、下载升级文件
// 2、覆盖本地文件
// 3、Process.Start【某工具B.exe】

    Process.Start【某工具B.exe】,我更新完文件以后直接运行【某工具B.exe】,好像是可以了嗷,代码跑一跑,咦,怎么没有效果?

    我们来看文件目录:

// 【某工具A.exe】
// 【某工具B.exe】
//   其他文件...

    代码没有效果的原因是因为运行的是A,关于升级的代码在B里面,所以你怎么改他都只会运行A,因为A是旧的代码。

    当然,除了覆盖。

    所以通常的做法是再来个套壳exe,里面写个A启动B的逻辑,更新文件时,用套壳A覆盖旧的A,这样再次启动A时,就可以启动B了,而不是A一直在那里循环。

    这种做法是OK的,不过还不完善,比如安装目录有2个exe,桌面还是旧的快捷方式,用户可以自己手动处理一下,但是如果程序能处理好,傻瓜式操作是不是更方便呢?

    升级后,1、删除桌面快捷方式;2、根据新的exe名称创建新的快捷方式;3、删除旧的exe

    这里我犯了一个错误,在套壳exe代码里删除旧的exe(最后才发现是自己删自己,无语了),应该在新exe也就是B启动的时候删除A,这样就没问题了。

    时间关系,只写到这里。

    祝大家国庆快乐!

 

标签:文件,逻辑,exe,启动,编程,笔记,升级,更新,工具
From: https://www.cnblogs.com/sunshine-wy/p/18442215

相关文章

  • 【学习笔记】TLS/SSL握手
    前言:本篇将介绍TLS握手的实际握手过程,TLS握手创建了Client和Server之间“被保护的通道”,2个单向通道用来保护批量数据的传输(通过Confidentiality、Integrity和Authentication),一个通道是从Client到Server,另一个是从Server到Client。本篇将介绍最基础的握手-即握手采用的是RSA......
  • 如何选择适合自己的编程工具?
    在繁忙的工作环境中,一款高效的编程工具确实能带来翻天覆地的变化。对我来说,智能的代码编辑器VisualStudioCode堪称让工作效率翻倍的利器。VisualStudioCode拥有丰富的插件生态系统。无论是语法高亮、代码自动补全,还是各种编程语言的特定插件,都能极大地简化代码编写......
  • 3. 算法笔记-对数器
    对数器是一个非常重要的自我验证技巧,其实现步骤如下:(1)方法A(2)方法B(3)随机样本产生器(4)用相同的样本验证方法A和方法B,比对结果是否一致。(5)若出现样本,使得结果不一致,查找原因,进行改进。(6)否则,方法验证成功。#include<vector>#include<cstdio>#incl......
  • 苹果笔记本安装双系统,如何开启虚拟化
    1开启以下Windows功能并重启Hyper-v虚拟机监控程序,如果不能开,也可以不开。2下载rEFInd-bin软件并解压https://sourceforge.net/projects/refind/ 我的下载目录是:D:\refind-bin-0.14.23编辑文件将refind目录下的refind.conf-sample的文件名改为refind.conf,notepad++打开......
  • Drain算法-笔记
    简介论文链接:https://jiemingzhu.github.io/pub/pjhe_icws2017.pdf算法原理图:有几点注意:根节点和叶节点实际是一套规则,并不包含日志数据真正的日志数据在叶节点之下的LogGroup第一层节点,基于假设:具有相同日志事件的日志消息可能具有相同的日志消息长度第二层节点,基于......
  • 最小生成树学习笔记
    最小生成树证明最小生成树构成的过程实际上是做\(n-1\)次操作,每一次合并一个点集,直到图中只剩下一个集合为止。要达到的就是让每一次合并的代价之和最小。那么我们实际上可以贪心地选择边权最小的并且能够合并集合的边(Kruskal算法),这个算法的正确性简单来说可以用反证法来证......
  • 01-什么是逻辑学?
    逻辑内容逻辑形式逻辑内容是具体的逻辑形式是通用的、普遍性的同一个思维形式可以具有不同的甚至相反的思维内容逻辑学就是从实际思维中抽出思维形式作为自己的主要研究对象的,涉及思维内容方面的问题不是逻辑学所研究的对象,而是其它具体科学所研究的对象。同一律、矛盾律与......
  • prometheus学习笔记之Grafana 常用操作
    一、Panel设置1.单位设置2.Panel名称修改3.曲线别名修改前修改后 4.曲线排序 5.曲线复制6.曲线静默 7.Panel复制当前dashboard中复制跨dashboard或folder在其他dashboard中操作8.设置告警线设置告警条件其他按提示填写如果触发告警规则则......
  • 卓越网络安全教程笔记-四-
    卓越网络安全教程笔记(四)P64:11.4-【Metasploit渗透】Metasploit基本使用方法-2-一个小小小白帽-BV1Sy4y1D7qv好接下来我们来看另外一个比较重要的命令,也是我们会经常会用到的一个命令啊,模块相关的命令,柚子的使用方法啊,柚子那么英文翻译过来呢是使用的意思哎,主要通过这个命令......
  • <<迷雾>> 第5章 从逻辑学到逻辑电路(2)--非门 示例电路
    一个应用非门的例子info::操作说明鼠标单击开关切换开合状态primary::在线交互操作链接https://cc.xiaogd.net/?startCircuitLink=https://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch05-05-not-gate-sample.txt原图一个自带电源的常闭触点......