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 没有

先潦草的写下后面真能跑起来在来改吧    

先这样吧 。。。坑对新手不是很友好。。。目测跑个测试环境都费劲。。。

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

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

相关文章

SpringMVC系列三: Postman(接口测试工具)

接口测试工具 &#x1f49e;Postman(接口测试工具)Postman介绍Postman是什么Postman相关资源Postman安装Postman快速入门Postman完成Controller层测试其它说明 &#x1f49e;课后作业 上一讲, 我们学习的是SpringMVC系列二: 请求方式介绍 现在打开springmvc项目 &#x1f49e…

2024年十大数据集成工具和软件应用场景解析

详细阐述了十大数据集成工具及其优缺点&#xff1a; 数据集成的挑战 在当今的商业环境中&#xff0c;企业常常面临着数据分散、系统孤立的难题。传统的数据集成方式&#xff0c;就像一张复杂的蜘蛛网&#xff0c;难以理顺&#xff0c;令人头痛不已。 数据孤岛: 各个业务系统独立…

window.history()方法总结

window.history()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; window.history是JavaScript中的一个内置对象&#xff0c;代表浏览器的历史记录。该…

【博士每天一篇文献-算法】Memory aware synapses_ Learning what (not) to forget

阅读时间&#xff1a;2023-12-13 1 介绍 年份&#xff1a;2018 作者&#xff1a;Rahaf Aljundi,丰田汽车欧洲公司研究员;阿卜杜拉国王科技大学(KAUST)助理教授;Marcus Rohrbach德国达姆施塔特工业大学多模式可靠人工智能教授 会议&#xff1a; Proceedings of the European c…

系统学习PLC

1.OB组织块 程序循环 PC ob1执行一次 ob123也执行一次 是 statup是程序启动的是第一个周期先执行starup&#xff08;0b100&#xff09;然后在执行ob1和0b123.这二个循环&#xff0c;周期执行这二个循环。1000是1s 2.DB块 建立指定数据块可以直接建立自己喜欢的类型 3.FB与…

轻量级 ioc/aop 框架 loveqq 1.0 发布,完全替换掉若依底层 spring 及其 starter

loveqq-framework 轻量级 ioc/aop 框架&#xff0c;比 spring 更强大的条件注解推断&#xff0c;打包后支持 jar index 启动。 本次更新&#xff1a; 正式更名为&#xff1a;loveqq-famework 新增&#xff1a;loveqq-boot-starter-mybatis 新增&#xff1a;loveqq-boot-start…

网络安全--安全设备(一)Dos

安全设备--Dos 一、Dos 是什么二、DDos是什么三、Dos&DDos的区别四、产品防御Dos&DDos方式五、常见的DDoS攻击类型包括但不限于以下几种&#xff1a; 一、Dos 是什么 Dos(拒绝服务攻击,Denial-of-Service)&#xff0c;是一种试图通过压倒网络或服务器来阻止合法用户访…

【八股系列】介绍React高阶组件,适用于什么场景?

文章目录 1. HOC的工作原理2. 返回的新组件3. 适用场景4. 注意事项5. 示例代码 React高阶组件&#xff08; Higher-Order Components&#xff0c;简称HOC&#xff09;是 React中一种高级的 复用组件逻辑的技术。 HOC自身不是 React API的一部分&#xff0c;而是基于 Reac…

如何优化频繁的v-if造成的页面卡顿

如何优化频繁的v-if造成的页面卡顿&#xff0c;只能用v-if 优化 1.将频繁的v-if转化为v-show&#xff1a;v-show与v-if有所不同。v-show会一直存在&#xff0c;只是CSS属性display被动态控制&#xff0c;而v-if则会根据条件在DOM中添加或移除元素。如果v-if出现频繁&#xff0c…

为何云原生是未来?企业IT架构的颠覆与重构(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是云原生 2、云原生的背景和起源 背景 起源 关…

Android 查询及获取应用程序 Package 及 Acticity 名称的方法

一、通过命令查询和获取应用的Package及Acticity &#xff08;一&#xff09;通过命令查询应用包名及安装信息 以下是常用命令&#xff1a; 命令形式作用adb shell pm list packages查询系统中所有应用的包名adb shell pm list packages -s查询系统应用包名adb shell pm lis…

vue实现点击元素跳转至另一个网站

在 Vue 中&#xff0c;要实现点击一个元素并触发函数跳转到另一个网站的功能&#xff0c;你可以直接在元素的点击事件处理程序中调用 window.location.href 来设置新的 URL。但如果你确实需要在点击事件中先执行一些逻辑&#xff08;例如发送请求、修改状态等&#xff09;&…

19、架构-虚拟化容器

概述 本文讲解虚拟化容器技术的发展及其在现代计算架构中的应用。内容分为三个主要部分&#xff1a;容器的崛起、以容器构建系统、以应用为中心的封装。以下是对每个知识点的详细描述。 1、 容器的崛起 容器技术的快速发展和广泛应用为软件开发和运维带来了巨大的变革。以下…

前端性能优化篇之webpack如何提⾼的打包速度、如何减少打包体积、如何⽤来优化前端性能、如何提⾼构建速度?

目录 如何提⾼webpack的打包速度?1. 使用最新版本的Webpack和相关插件&#xff1a;2. 合理配置Loader&#xff1a;3. 使用HappyPack或thread-loader&#xff1a;4. 使用DllPlugin预编译依赖模块&#xff1a;5. 使用Tree Shaking&#xff1a;6. 使用缓存&#xff1a;7. Code Sp…

MySQL 函数

1、CURDATE()&#xff1a;返回当前的日期。 2、查询当前年月 SELECT DATE_FORMAT(CURDATE(),%Y-%m) AS year_month 3、当前日期添加 1 个月 INTERVAL 1 MONTH 4、查询近6个月的月份 SELECT DATE_FORMAT(CURDATE(),%Y-%m)AS year_month UNION SELECT DATE_FORMAT((CURDAT…

【网络安全学习】使用Kali做信息收集 -03- <综合侦察>

综合侦察涉及从多个来源收集和分析目标的信息&#xff0c;以了解其背景、特征、潜在漏洞和风险。 下面介绍一些在Kali中常用的综合侦察工具。 1.Dmitry 它是一个命令行工具&#xff0c;可以使用不同的选项来收集目标的各种信息。 Dmitry可以与whois服务和Netcraft服务结合使…

【启明智显产品介绍】Model4 工业级HMI芯片详解系列专题(一):芯片性能

Model4 工业级HMI芯片详解系列专题&#xff08;一&#xff09;【芯片性能】 Model4系列工业级MPU是国产自主面向工业应用的RISC-V架构的应用级芯片&#xff0c;内置玄铁64bit RISC-V CPU C906&#xff0c;主频高达600MHz&#xff0c;算力约1380DMIPS。 Model4系列工业级MPU具…

层次越高的人,越“冷漠”?

层次越高的人越冷漠。 人际关系无疑是我们生活中很重要的一部分。 我们生来渴望连接和互动&#xff0c;但这种渴望有时会让我们忘记自己的需求和边界。 我们可能会牺牲掉自己的时间&#xff0c;经历和情感迎合别人&#xff0c;以求得到认可和爱。 然而&#xff0c;当我们在人际…

HTML5 Web Workers: 异步编程的强大力量

在现代Web开发中&#xff0c;随着应用程序变得越来越复杂&#xff0c;用户界面的流畅性和响应性成为了决定用户体验好坏的关键因素之一。传统的JavaScript执行模型中&#xff0c;所有脚本都在同一个线程上运行&#xff0c;这意味着复杂的计算任务会阻塞UI更新&#xff0c;导致页…

BizDevOps全局建设思路:横向串联,纵向深化

本文来自腾讯蓝鲸智云社区用户&#xff1a;CanWay BizDevOps概述 IT技术交付实践方法在不断迭代中持续优化。在工业化时代&#xff0c;Biz&#xff08;业务&#xff09;、Dev&#xff08;开发&#xff09;、Ops&#xff08;运维&#xff09;三者往往相对分离&#xff0c;甚至有…