WPF 程序 分布式 自动更新 登录 打包
服务器server端 core api
客户端WPF
// 检查应用更新
//1、获取最新文件列表
//
var files = fileService.GetUpgradeFiles();
// 2、文件判断,新增的直接下载;更新的直接下载;删除的直接删除
// 客户端本地需要一个记录,最后更新的记录()
服务器端 api

orm dal



客户端
1、更新文件对比
2、自动更新程序与逻辑梳理
3、进程间更新数据传输
4、更新数据接收与准备
5、更新程序UI处理
6、文件下载服务接口逻辑
1文件对比 客户端本地对比upgrade_temp.json文件



// 开始下载文件 从服务器上下载相关文件


// 服务器拿到文件列表中的文件都得下载
if (update_file.Count > 0)
{// 启动更新程序,并且将更新文件列表传给它Process.Start("Zhaoxi.PMS.Client.Upgrade.exe", update_file);// // 下载完成进行服务文件列表的保存(Json序列化)// 这个逻辑需要在Upgrade.exe进程里处理,判断正常更新完成后写入//json_str = System.Text.Json.JsonSerializer.Serialize(update_file);//File.WriteAllText("upgrade_temp.json", json_str);//Application.Current.Shutdown();System.Environment.Exit(0);// 结束进程
}
启动线程 调试 更新程序 进程间更新数据传递


细节 文字省略

进度 <TextBlock Text="{Binding FileName}" VerticalAlignment="Bottom"Grid.Column="1" Grid.ColumnSpan="2" Margin="10,0" FontWeight="Bold"TextTrimming="WordEllipsis"/><TextBlock Text="{Binding FileLenght}" VerticalAlignment="Top" Grid.Row="1" Grid.Column="1" Margin="10,3" FontSize="11" Foreground="#888"/><TextBlock Text="{Binding CompletedLen}" VerticalAlignment="Top" Grid.Column="2" Margin="10,3"Grid.Row="1" FontSize="11" Foreground="#888"/><TextBlock Text="{Binding Progress,StringFormat={}{0:P0}}" VerticalAlignment="Center" HorizontalAlignment="Center"Grid.Column="3" Grid.RowSpan="2"/>
正在更新
<TextBlock Grid.Row="2" Margin="30,0,0,0" VerticalAlignment="Center"><Run Text="正在更新...."/><Run Text="["/><Run Text="{Binding Completed}"/><Run Text="/"/><Run Text="{Binding TotalCount}"/><Run Text="]"/></TextBlock><Button Content="开始更新" Grid.Row="2" Margin="0,0,30,0" HorizontalAlignment="Right" VerticalAlignment="Center"Padding="10,5" BorderThickness="0"Background="Orange" Foreground="White"Command="{Binding StartCommand}"/>
download sever
注意:关键点 坑点! 下载的文件路径
// http://localhost:5000/api/file/download/modules/dll_name
// http://localhost:5273/api/File/download/none/ Client.BLL.dll
[HttpGet("download/{p}/{file}")]public ActionResult Download([FromRoute(Name = "p")] string path, [FromRoute] string file){//if (!System.IO.File.Exists(path))// return NotFound("123123123");// 服务器中存放更新文件的根目录var root = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;string filePath = Path.Combine(root, "WebFiles", "UpgradeFiles");// 如果有子目录,则拼进来if (path != "none")filePath = Path.Combine(filePath, path);// 最终文件路径filePath = Path.Combine(filePath, file);ResFileStream fs = new ResFileStream(filePath, FileMode.Open, FileAccess.Read);var type = new MediaTypeHeaderValue("application/oct-stream").MediaType;// 最终返回文件对象return File(fs, type, fileDownloadName: file);}
internal class ResFileStream : FileStream{public ResFileStream(string path, FileMode mode, FileAccess access) : base(path, mode, access) { }/// <param name="array"></param>/// <param name="offset">偏移量</param>/// <param name="count">读取的最大字节数</param>/// <returns></returns>public override int Read(byte[] array, int offset, int count){// 此处可以限制下载速度//count = 256;//Thread.Sleep(10);return base.Read(array, offset, count);}}

取巧调试 这里坑比较大 哈 备注下


Zhaoxi.PMS.Client.BLL.dll|UpgradeFiles|100
Zhaoxi.PMS.Client.IBLL.dll|UpgradeFiles|110
Zhaoxi.PMS.Client.IDAL.dll|UpgradeFiles|120
Zhaoxi.PMS.Client.BLL.dll|Modules|100
Zhaoxi.PMS.Client.IBLL.dll||110
Zhaoxi.PMS.Client.IDAL.dll||120
取巧部分不知道能否上生产环境哈 待验证 目测应该不能
--分割 演示
vip.xspf|.\|4577|101c3def4146d1e7f018583bd7aa5483
箭头.png|.\|1823|8d15c94446a411344c0535898663bdf2
宣讲PPT.txt|.\|1249|f747c130458731baf49b28a3a4d5b587

验证

请求下载


downloadFile 去下载

服务器端

客户端







文件读写权限修改 也不行 ?

--

疑问 这两个程序相互打开关系 杀毒软件不打架?
c端

c端更新程序

测试了下只是开发环境的主流程部分跑起来了。。离生产环境使用 还有诸多细节处理。
%AppData%
wpf 分布式登录 server api
带token jwt

C端 
setup 没有
先潦草的写下后面真能跑起来在来改吧
先这样吧 。。。坑对新手不是很友好。。。目测跑个测试环境都费劲。。。
相关文章:
WPF 程序 分布式 自动更新 登录 打包
服务器server端 core api 客户端WPF // 检查应用更新 //1、获取最新文件列表 // var files fileService.GetUpgradeFiles(); // 2、文件判断,新增的直接下载;更新的直接下载;删除的直接删除 // 客户端本地需要一个记录…...
视频汇聚安防综合管理平台EasyCVR支持GA/T 1400视图库标准及设备接入配置
一、概述 视频汇聚安防综合管理平台EasyCVR视频监控系统已经与公安部GA/T 1400视图库标准协议实现了对接,即《公安视频图像信息应用系统》。 安防监控系统EasyCVR支持采用GA/T 1400进行对接,可实现人脸数据使用的标准化、合规化。其采用统一接口对接雪…...
pgsql给单独数据库制定账号权限
登录到PostgreSQL: 使用psql或其他PostgreSQL客户端,以具有足够权限的账号(如postgres或superuser)登录。 2. 创建新账号: sql复制代码 CREATE USER new_user WITH PASSWORD your_secure_password; 注意:将your_secure_passwor…...
【Docker安装】Ubuntu系统下部署Docker环境
【Docker安装】Ubuntu系统下部署Docker环境 前言一、本次实践介绍1.1 本次实践规划1.2 本次实践简介二、检查本地环境2.1 检查操作系统版本2.2 检查内核版本2.3 更新软件源三、卸载Docker四、部署Docker环境4.1 安装Docker4.2 检查Docker版本4.3 配置Docker镜像加速4.4 启动Doc…...
Flink Kafka获取数据写入到MongoDB中 样例
简述 Apache Flink 是一个流处理和批处理的开源框架,它允许从各种数据源(如 Kafka)读取数据,处理数据,然后将数据写入到不同的目标系统(如 MongoDB)。以下是一个简化的流程,描述如何…...
Android Jetpack Compose入门教程(二)
一、列表和动画 列表和动画在应用内随处可见。在本课中,您将学习如何利用 Compose 轻松创建列表并添加有趣的动画效果。 1、创建消息列表 只包含一条消息的聊天略显孤单,因此我们将更改对话,使其包含多条消息。您需要创建一个可显示多条消…...
如何避免接口重复请求(axios推荐使用AbortController)
前言: 我们日常开发中,经常会遇到点击一个按钮或者进行搜索时,请求接口的需求。 如果我们不做优化,连续点击按钮或者进行搜索,接口会重复请求。 以axios为例,我们一般以以下几种方法为主: 1…...
算法设计与分析:网络流求解棒球赛淘汰问题C++
目录 一、实验目的 二、问题描述 三、实验要求 四、算法思想 1、明显的:win[i]+remain[i][j]<> 2、不明显的:最大流 3、操作 3.1 先读入相关信息(邻接矩阵**k),进行一遍“明显的”判断。 3.2 对剩下的“不明显的”的每个球队构建流网络(邻接表vector< ve…...
Linux Ubuntu 24.04 C语言gcc编译过程详解
下面是Hello World程序源代码文件hello.c的内容,我们将以它为例来说明源文件到可执行文件的形成过程,主要分4步:预处理、汇编、机器码、链接。 #include <stdio.h> int main () {printf ( "hello, world \n " );return 0; }…...
Python自动化办公篇—pandas操作Excel:读取+查看+选择+清洗+排序+筛选+函数+写入
目录 专栏导读库的介绍库的安装1、读取数据2、查看数据3、选择数据4、数据清洗5、数据排序6、数据筛选7、数据操作8、数据写入总结 专栏导读 文章名称链接Python自动化办公—pyautogui图像定位\点击功能,实现自动截取当前屏幕并检索点击(可制作为游戏点击脚本)点我进行跳转Pyt…...
数据库大作业——音乐平台数据库管理系统
W...Y的主页😊 代码仓库分享💕 《数据库系统》课程设计 :流行音乐管理平台数据库系统(本数据库大作业使用软件sql server、dreamweaver、power designer) 目录 系统需求设计 数据库概念结构设计 实体分析 属性分…...
【DBA早下班系列】—— 并行SQL/慢SQL 问题该如何高效收集诊断信息
1. 前言 OceanBase论坛问答区或者提交工单支持的时候大部分时间都浪费在了诊断信息的获取交互上,今天我就其中大家比较头疼的SQL问题,给大家讲解一下如何一键收集并行SQL/慢SQL所需要的诊断信息,减少沟通成本,让大家早下班。 2. …...
用python实现多文件多文本替换功能
用python实现多文件多文本替换功能 今天修改单位项目代码时由于改变了一个数据结构名称,结果有几十个文件都要修改,一个个改实在太麻烦,又没有搜到比较靠谱的工具软件,于是干脆用python手撸了一个小工具,发现python在…...
【DevOps】深入探索Ubuntu操作系统:全面了解
引言 在开源软件的世界里,Ubuntu是一个闪耀的明星。它不仅是一个操作系统,更是一种社区精神、一种共享和协作的文化。Ubuntu操作系统基于强大的Linux内核,由世界各地的开发者共同维护和改进。在这篇博文中,我们将深入探索Ubuntu操…...
【Linux】—MySQL安装
文章目录 前言一、下载官方MySQL包二、下载完成后,通过xftp6上传到Linux服务器上三、解压MySQL安装包四、在安装目录下执行rpm安装,请按顺序依次执行。五、配置MySQL六、启动MySQL数据库七、退出,重新登录数据库 前言 本文主要介绍在Linux环境…...
【vue】form表单提交validate验证不进valid原因
目录 1. 原因 1. 原因 1.<el-form>是否写了ref“form”。2.是否有其它标签写了ref“form”。3.<el-form>中要写成:model,不能使用v-model。4.自定义的validate要各个路径均能返回callback()。 const validatePass (rule, value, callback) > {if (…...
如何用 Google Chrome 浏览器浏览经过 XSLT 渲染的 XML 文件
对于经过XSLT渲染的XML文件,本来,可以直接用 IE (Internet Explorer) 打开,就能看到渲染之后的样子,很方便。但是后来,微软把 IE 换成了 Microsoft Edge,按理说这是比 IE 更先进的浏览器,可是偏…...
Python学习笔记12:进阶篇(二),类的继承与组合
类的继承 我们在编写一系列的类的时候,会发现这些类很相似,但是又有各自的特点和行为。在编写这些类的时候,我们可以把相同的部分抽象成一个基类,然后根据其他不同的特点和行为,抽象出子类,继承这个基类。…...
npm install cnpm -g 报错4048
npm install cnpm -g 报错4048 设置淘宝镜像: 报错如下: 其他博主提供的方法都尝试了,比如管理员权限打开终端,删除.npmrc文件,清除缓存npm cache clean -f等都试了无效,最后怀疑是npm和cnpm版本不对应&…...
本地快速部署 SuperSonic
本地快速部署 SuperSonic 0. 引言1. 本地快速部署 supersonic2. 访问 supersonic3. 支持的数据库4. github 地址 0. 引言 SuperSonic融合Chat BI(powered by LLM)和Headless BI(powered by 语义层)打造新一代的BI平台。这种融合确…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
