winform 通用自动更新程序
通用自动更新程序
主要功能:
1. 可用于 C/S 程序的更新,集成到宿主主程序非常简单和配置非常简单,或不集成到主程序独立运行。
2. 支持 HTTP、FTP、WebService等多种更新下载方式,下载前判断本地文件是否存在,存在则计算文件 Hash,避免重复下次。
3. 支持多级目录更新,支持空文件、文件夹的更新
4. 支持更新程序的自更新
5. 支持二种更新方式:自动更新、手动点击按钮更新
6. 有多种容错处理机制
7. 支持更新前后的脚本
如何使用:
1. 将
二个文件拷贝到 APP 根目录,并在 APP 的 Main 方法代码前加上如下代码:

更新大致流程:
1. 检测更新
获取服务器上的更新信息,与本地的版本信息对比
2. 下载更新
将更新的文件、文件夹下载到更新临时目录
3. 安装更新
将更新临时目录的文件、文件夹移动到主程序目录中
注意:如果发现 WagUpd.exe 自身,则其拷贝到主程序目录下且命名为 ~WagUpd.exe,自动关闭现有程序,重新启动 ~WagUpd.exe
4. 完成更新
更新前、更新后的脚本
脚本可通过文件方式推送到客户端 ScriptUpdDoBefore ScriptUpdDoEnd 文件夹中,执行成功后,转移到 Done 文件夹中。
如注册 ocx 组件的事例如下:

<?xml version="1.0" encoding="utf-16"?>
<SuperScript>
<ScriptInfo>
<Language>C#</Language>
<UpdateTime>-- :: </UpdateTime>
<ScriptName />
<Remark />
</ScriptInfo>
<RefAssembly>
<Name>mscorlib.dll</Name>
<Path>%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319</Path>
<Type>System</Type>
</RefAssembly>
<RefAssembly>
<Name>System.dll</Name>
<Path>%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319</Path>
<Type>System</Type>
</RefAssembly>
<RefAssembly>
<Name>System.Data.dll</Name>
<Path>%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319</Path>
<Type>System</Type>
</RefAssembly>
<RefAssembly>
<Name>System.Xml.dll</Name>
<Path>%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319</Path>
<Type>System</Type>
</RefAssembly>
<RefAssembly>
<Name>System.Windows.Forms.dll</Name>
<Path>%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319</Path>
<Type>System</Type>
</RefAssembly>
<RefAssembly>
<Name>System.Drawing.dll</Name>
<Path>%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319</Path>
<Type>System</Type>
</RefAssembly>
<RefAssembly>
<Name>WagUpd.Core.dll</Name>
<Path>E:\_Wagwei_Coding\WagUpd\WagUpd--\WagUpd.Core\bin\Debug</Path>
<Type>Custom</Type>
</RefAssembly>
</SuperScript> /* 脚本代码 */ #region Namesapce
using System;
using System.Xml;
using System.IO;
using System.Text;
using System.Data;
using System.Threading;
using System.Diagnostics;
using System.Reflection;
using System.Collections;
using System.Windows.Forms;
using System.Collections.Generic; using WagUpd.Core;
#endregion public class RegCom : WagIUpdDo
{
//ScriptUpdDoBefore ScriptUpdDoEnd
//Done public bool Run(ref string message)
{
#region 是否为管理员
if(false)
{
System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();//获得当前登录的Windows用户标示
System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity); if (!principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))//判断当前登录用户是否为管理员
{
message = "需要管理员权限来执行";
return false;
}
}
#endregion string windir = Environment.GetEnvironmentVariable("windir"); string path = Path.Combine(Application.StartupPath, ""); string file = Path.Combine(path, "VidDisplay.ocx"); Debug.WriteLine("ocx 文件: " + file); if(!File.Exists(file))
{
message = "未找到文件: " + file;
return false;
} ProcessStartInfo si = new ProcessStartInfo();
si.FileName = "Regsvr32.Exe";
si.Arguments = file;//"/s " + file; //si.UseShellExecute = true;
//si.RedirectStandardInput = false;
//si.RedirectStandardOutput = true;
//si.CreateNoWindow = false; Process p = new Process();
p.StartInfo = si;
p.Start(); //p.WaitForExit();
//p.Close(); message = "ok";
return true;
} public static void Main()
{
RegCom rc = new RegCom();
bool b = false;
string message = "";
b = rc.Run(ref message);
MessageBox.Show(message);
} //CMD C:\Windows\System32\regsvr32.exe C:\%\VidDisplay.ocx // regsvr32是一个用来注册动态链接库(DLL)或ActiveX控件(OCX)文件的命令,其用法如下:
// regsvr32[/u] [/s] [/n] [/i[:cmdline]] dllname
// / u - 解除服务器注册
// /s - 无声;不显示消息框
// /i - DllInstall,给其传递一个可选 [cmdline] / u一起使用时,卸载dll
// / n - DllRegisterServer / i一起使用 // 如果要注册“MSCOMCTL.OCX”这个控件,在 MS-DOS提示符下输入“regsvr32 MSCOMCTL.OCX”,
// 回车后便后提示“ MSCOMCTL.OCX中的 DllRegisterServer成功。”。如果不让它显示提示,加上参数/s即可。 #region 非管理员运行
/*
[Window Title]
RegSvr32 [Content]
模块“D:\Users\Wagwei\Desktop\4444\8888\VidDisplay.ocx”已加载,但对 DllRegisterServer 的调用失败,错误代码为 0x80040201。 有关此问题的详细信息,请将该错误代码用作搜索字词进行在线搜索。 */
#endregion #region 管理员运行
/*
[Window Title]
RegSvr32 [Content]
DllRegisterServer 在 D:\Users\Wagwei\Desktop\4444\8888\VidDisplay.ocx 已成功。 */
#endregion }
界面截图如下:




进程关联了模块:

进程使用了文件:

自更新:





服务端工具
1. 执行更新



2. 查看备份

winform 通用自动更新程序的更多相关文章
- WinForm通用自动更新器AutoUpdater项目实战
一.项目背景介绍 最近单位开发一个项目,其中需要用到自动升级功能.因为自动升级是一个比较常用的功能,可能会在很多程序中用到,于是,我就想写一个自动升级的组件,在应用程序中,只需要引用这个自动升级组件, ...
- C# WINFORM的自动更新程序
自动更新程序AutoUpdate.exe https://git.oschina.net/victor596jm/AutoUpdate.git 1.获取源码 http://git.oschina.ne ...
- WinForm通用自动更新AutoUpdater项目实战
目前我们做的上位机项目还是以Winform为主,在实际应用过程中,可能还会出现一些细节的修改.对于这种情况,如果上位机带有自动更新功能,我们只需要将更新后的应用程序打包放在指定的路径下,可以让用户自己 ...
- Winform开发框架之通用自动更新模块(转)
在网络化的环境中,特别是基于互联网发布的Winform程序,程序的自动更新功能是比较重要的操作,这样可以避免挨个给使用者打电话.发信息通知或者发送软件等,要求其对应用程序进行升级.实现程序的自动更新, ...
- winform自动更新程序实现
一.问题背景 本地程序在实际项目使用过程中,因为可以操作电脑本地的一些信息,并且对于串口.OPC.并口等数据可以方便的进行收发,虽然现在软件行业看着动不动都是互联网啊啥的,大有Web服务就是高大上的感 ...
- Windows程序通用自动更新模块(C#,.NET4.5以上)
本通用自动更新模块适合所有Windows桌面程序的自动更新,不论语言,无论Winform还是wpf. 一.工作流程:1. 主程序A调起升级程序B2. B从服务器获取更新程序列表,打印更新信息.3. B ...
- SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework
9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Lo ...
- 使用 advanced installer 为 winform 做自动更新
原文:使用 advanced installer 为 winform 做自动更新 advanced installer 是一款打包程序,基于 windows installer 并扩展了一些功能,比如 ...
- C#[WinForm]实现自动更新
C#[WinForm]实现自动更新 winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个 ...
随机推荐
- 阅读prettytable 一些代码、get、set 检查参数
阅读代码是因为我发现官方教程里的代码在本地不能用,所以就通过”查看定义“转到了源代码里. 通过阅读源代码,查看方法内是否有教程中所说的方法名和参数名,然后再通过”查看引用“来试图了解函数的流程,如果没 ...
- python 排序 选择排序
算法思想: 首先从序列中选择一个最值,将这个元素和序列的首地址上的元素交换,这样就完成了一个元素的排序,接下来,重复上述过程,不断的从剩下的序列中选取最值,然后添加到有序部分的末尾(注意,这种添加是通 ...
- pyhanlp的安装
github 的官方地址:https://github.com/hankcs/pyhanlp conda install -c conda-forge jpype1 pip install pyhan ...
- Python基础12
jupyter notebook 快捷键 ”Ctrl + / ” 快速注释/撤销注释.注释整行或者整段代码.
- Linux用户管理(4)
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.Linux用户至少属于一个组. 1.添加用户 useradd ...
- QT在Mac OS上编译运行初体验
QT是一个跨平台的框架,支持PC端(Windows.Linux和Mac OS)以及移动端(Android和IOS),之前的开发大都在Windows或者Ubuntu上,考虑到项目多平台支持性,本文对Ma ...
- Zifencei扩展
fence 指令对外部可见的访存请求,如设备 I / O 访问,内存访问等进行串行化.外部可见是指对处理器的其他核心.线程,外部设备或协处理器可见. fence.i 指令同步指令和数据流.在执行 fe ...
- 面向对象(三)--多态、封装、property装饰器
一.多态与多态性 1.什么是多态 多态指的是同一种类/事物的不同形态 class Animal: def speak(self): pass class People(Animal): def spe ...
- LOJ 3156: 「NOI2019」回家路线
题目传送门:LOJ #3156. 题意简述: 有一张 \(n\) 个点 \(m\) 条边的有向图,边有两个权值 \(p_i\) 和 \(q_i\)(\(p_i<q_i\))表示若 \(p_i\) ...
- 采坑复盘:logging日志能用封装后的函数来打日志,发现filename一直显示封装logging函数的方法所在的文件名
问题: logging日志能用封装后的函数来打日志,发现filename一直显示封装logging函数的方法所在的文件名 原因: logging记录的是第一个函数执行所在的文件,那用封装的函数,首先执 ...