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

news/2024/10/6 8:28:26/文章来源:https://www.cnblogs.com/sunshine-wy/p/18442215

    记得去年来这边时,曾面过一家公司,要做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,这样就没问题了。

    时间关系,只写到这里。

    祝大家国庆快乐!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/806301.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder Beginner Contest 371(ABCDE)

A 个人直接硬解,讨论情况也并不复杂 代码: #include<bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10; void solve() {char a, b, c;cin >> a >> b >> c;if (a == <) {if (c == <) {cout << "B&quo…

python 敏感词识别处理

定义词库 1、敏感词库(black_word.txt) 2、jeiba 分词库(jieba_db_file.txt) (我这简单的就用文本来记录了,可以将这些词库都通过数据库来存储,对企业来说通过可视化页面去增删改可能会更方便运营处理)代码示例 import os import jiebablack_word_list = list()def load_word…

刷题系统重构--添加vip功能

c端系统往往都具有vip功能作为主要盈利点,那咱们的刷题微服务系统肯定也该有,但是系统设计的时候就没有vip系统,今天构思了一下把原有代码重构了一下, 首先,根据原料的题目表建一张vip题目表,可以用来只存储vip题目,或者01区分vip题目,重构了一下新增题目,加了一项添加…

Winform控件优化之圆角按钮【各种实现中的推荐做法】

简介: Windows 11下所有控件已经默认采用圆角,其效果更好、相对有着更好的优化...尝试介绍很常见的圆角效果,通过重写控件的OnPaint方法实现绘制,并在后面进一步探索对应的优化和可能的问题Windows 11下所有控件已经默认采用圆角,其效果更好、相对有着更好的优化,只是这是…

Windows 中的硬链接、目录联接(软链接)、符号链接、快捷方式

在Linux文件系统中经常提及硬链接(Hard Link)和符号链接(Symbolic Link),Windows中也可以创建链接,但由于丰富的图形界面操作,很少提及链接。Windows 的 NTFS 文件系统支持三种链接:硬链接(Hard Link)、符号链接(Symbolic Link)和目录链接(junction point),此外还有一个大…

ehviewer绿色版1.9.5.2最新2024ios苹果安卓

随着科技的不断发展,手机已经成为我们生活中不可或缺的一部分。在这个数字化时代,人们对于娱乐方式的需求也在逐渐改变。其中,漫画作为一种受欢迎的阅读形式,已经从传统的纸质书籍转变为数字版。而今天,我要为大家介绍的这款软件——ehviewer绿色版1.9.5.2,正是为了满足广…

建筑中的文化表达与地方特色:演绎地域之魂

在浩瀚的城市风貌中,每一座建筑都是文化的载体,无声地讲述着地域的故事与精神。建筑不仅需要满足功能需求,更应成为文化传承与创新的舞台。本文旨在深度剖析建筑设计如何在尊重与弘扬地方文化的基础上,巧妙融合现代元素,创造出既有时代感又不失根源性的建筑作品。 1. 深入…

确保 PbootCMS 网站能够正常运行,并且成功安装和授权模板

准备 PHP 环境确认 PHP 版本使用命令行或 SSH 登录服务器,运行以下命令检查 PHP 版本:shphp -v确认版本为 5.3+。上传 PbootCMS 文件使用 FTP 客户端使用 FTP 客户端(如 FileZilla、WinSCP 等)连接到服务器。 将 PbootCMS 的所有文件上传到服务器的根目录(通常是 public_h…

解决 PbootCMS 网站程序提示“执行 SQL 发生错误

步骤一:清理缓存文件打开 FTP 客户端使用常用的 FTP 客户端(如 FileZilla、WinSCP 等)连接到服务器。找到 runtime 文件夹在 FTP 客户端中找到 PbootCMS 的安装目录,通常是在 public_html 或 www 目录下。删除 runtime 文件夹中的内容进入 runtime 文件夹,删除其中的所有文…

有效地解决 PbootCMS 网站程序提示“执行 SQL 发生错误!错误:DISK I/O ERROR”的问题,并确保系统的稳定运行

打开 FTP 客户端使用 FTP 客户端连接到服务器。找到 runtime 文件夹在 FTP 客户端中找到 PbootCMS 的安装目录,例如: /var/www/html/pbootcms删除 runtime 文件夹中的内容进入 runtime 文件夹,删除其中的所有文件和子文件夹。升级程序备份现有数据使用 FTP 客户端备份整个网…

FME Desktop/Form for Linux快速安装

太长不看:FME Flexnet Server许可证管理器快速安装包,适用于FME Desktop/Form/Engine/Server:com.safe.fme-flexnet-bbs-20240923.zip小问题1:由于ArcGIS的一些函数库是Windows下专有的,所以ArcGIS的一些专有格式,FME for Linux是无法处理的。小问题2:FME for Linux没有…

项目部署一:前期准备(本地上传、gitignore、ssh连接、密钥)

项目部署想要将django项目部署在服务器上,本质上需要三大部分:将代码上传到服务器 在服务器上 获取代码、安装服务、配置环境 启动服务1.代码同步 上传代码的方式有很多种,例如:FTP工具、scp命令、rsync服务、svn等,不过目前公司主流的都是使用git+代码托管平台。本地电脑…