Linux系统 推送Windows桌面应用更新

目录

背景:

实现过程:

一、程序自动更新   

二、安装Apache 开启 Http 服务

三、推送更新

四、更新效果

五、结尾     


背景:

       最近参与一个项目,本人负责桌面应用开发,之前直接用Setup Factory 打包发布。每次发布新的版本都要卸载重新安装,十分麻烦。客户提出需要,实现应用程序在线更新。整个项目的后端和前端部署在公司Linux服务器上,系统是Ubuntu 18.04,同时做了端口映射。于是我就借助该服务器,进行更新发布。现将实现过程整理一下。

实现过程:

一、程序自动更新   

       本人开始对Linux操作不熟悉,但是需求来了咱就得上不是。 首先要给软件添加自动更新模块,Winform/WPF 自动更新网上的例子很多。咱就不重复造轮子了。

       本人参考了小聪.Net  分享在gitee上的例子,https://gitee.com/xcong/CheckUpdate.Net.git,感谢分享。

       博文地址:https://www.cnblogs.com/xcong/  

       如果更新模块发布在IIS上可以直接参考他的文章就好了。他的程序分为服务器端、客户端。将更新的程序文件或者安装包放在服务器端上,在服务端,通过可视化界面添加更新内容,程序自动更新配置文件,更新的信息写入到服务器配置文件中。 

        客户端启动时,读取本地配置,获取服务器链接地址,然后读取服务器配置参数,获取更新列表和安装包版本。与本地配置版本进行比较,发现有更新时,自动下载更新。

二、安装Apache 开启 Http 服务

        与Windows 上IIS相似,通过Linux发布程序更新,需要借助FTP 或者Http,供客户端下载文件进行更新。最开始我是在Windows10,开启Windows的子系统Linux。然后在应用商店安装Ubuntu 18.04 LTS。整个流程也是先在自己电脑上运行起来,才去公司的Linux服务器上操作的。如果你有现成Linux服务器就不用我这么曲折了。

控制面板 -> 程序和功能 -> 启用或关闭windows功能

     开启后重启电脑,去应用商店下载一个Ubuntu安装。设置好用户名和密码。接下来就可以进行Linux 指令操作了。

 安装Apache指令:

$ sudo apt-get update

$ sudo apt-get install apache2

安装成功后开启服务

$ sudo /etc/init.d/apache2 start  
或者  
$ sudo /etc/init.d/apache2 restart

       当时出现启动失败,是因为服务默认启动的是80端口。而Winddow10系统上80端口被我测试的Web 应用占用了。当关闭该Web应用后,再执行上述命令就可以成功开启。当然每个人的情况不太一样。当你的Windows 上80端口被占用的话,就要通过cmd 查询  netstat -ano | findstr 80,通过pid查看被哪个应用占用了,然后去任务管理器关掉这个应用。

有出现其他错误,参考如下:

[core:warn] [pid 190:tid 139972936206208] (92)Protocol not available: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT

解决办法:

$ sudo vim /etc/apache2/apache2.conf

      在文件最后加上,

ServerName localhost
AcceptFilter https none

AcceptFilter http none

       通过vim 编辑文件基本命令 : i 编辑 ; 编辑完成后 ,esc 退出编辑状态; 然后输入 “:wq” 或者“:wq!”。不用忘记输入冒号。      

       然后再重启 apache 服务。 服务器上的80端口,实际的生产环境可能已经被其他服务占用,这个时候就需要手动修改默认的端口了。 这个时候需要修改的两个文件。 

       参考博文:https://www.cnblogs.com/yuxiaoba/p/9937312.html

       修改完成端口后,需要重启服务器。这个时候在浏览器输入ip:端口就可以访问默认的 apache的index.html页面。apache服务器的默认目录在/var/www/html。准备在该文件下上传更新文件就需要删除 index.html。

# 删除文件(使用超级管理员权限)
sudo rm 文件名

$ cd /var/www/html

$ sudo rm index.html

三、推送更新

     接下来关键步骤,就是将Windows上的需要更新安装包和文件推送到服务器上。可以通过ssh推送也可以通过 pscp推送文件到Linux上。本人使用的是pscp。需要安装PuTTY。

    下载地址:

     https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html。根据自己Windows 版本下载相应的版本。本人下载的64位的。

         使用指令 pscp -r 源地址 username@ip:目标地址 来进行推送。示例如下:

pscp -r  C:\Users\hxd\UpdateFileServer\ iot@192.1.80.48:/var/www/html

       其中UpdateFileServer是我在Window上存放更新程序文件和安装包的地方。 -r 迭代推送,将该文件下的文件以及子文件都推送。 推送会存在失败的情况,本人碰到的是提示目标文件夹的权限。也就是 Ubnutu 的  /var/www/html读写权限不够。这个时候需求为该文件夹设置权限。 通过指令chmod 777 * 来设置读写最高权限。

$ cd /var/www

$ chmod 777 html

      这个时候再发送刚才的推送指令就正常了。

       在浏览器通过输入本机IP和设置的端口就可以浏览上传的文件列表了。其中file是需要更新的文件、动态库以及安装包等。UpdateServer.xml就是服务器配置文件。更新的版本信息在其中。

四、更新效果

       当推送的内容发送到服务器后,在客户端上启动程序,自动更新的外壳程序会通过配置文件查询到服务器更新地址,然后根据地址加载服务器配置读取更新信息列表,对比本地的版本信息。当服务器版本高于本地的记录的版本,于是下载更新。

        对于还未安装程序的电脑,可以提供给安装包的地址,这需要在第三步的时候,把安装包也推送过去。 

       这是在自己电脑上的测试环境实现在线更新,只能满足局域网的更新需求。客户是希望通过外网更新。这个时候需要将内网的端口映射到公司的外网端口上。这就需要公司的网管来操作了。当然如果你有权限也可以自己来配置,进行端口映射。

五、结尾     

       这是本人首次使用Linux服务器进行应用更新部署,系统文件的层次结构,还有系统指令还不熟悉,也是在不断学习中,发现问题,解决问题,就当对工作记录、总结,本文中有什么不妥的地方,欢迎指正!与君共勉!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值