winform安装后,自动更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform安装后,自动更新相关的知识,希望对你有一定的参考价值。
记得以前用过一款软件,能自动更新winform程序,免得开发人员每次去给每台机器安装、更新,用到Update.exe、sys.cfg、Update.exe.config这三个文件,大概原理就是校验每次的版本是否相同,不同就会替换放上去的文件。有没有人用过,或者有更好的更新软件
你是要更新什么?更新数据配置还是更新设计版式,更新设计版式就是 直接把设计版式去替换安装包里的exe文件,要更新数据配置直接在服务器上更新。Update.exe本身就是一个窗体,它的作用无非就是把安装包文件替换掉,关键在程序时怎么设计的,在程序 设计之前他的布局要是服务端--服务器--客户端连接关系,服务端应用程序就是处理逻辑的,客户端就是给每台使用者电脑安装的,但是这种模式界面修改时比较复杂,要通过数据来动态修改界面,其他的数据设置太容易了,服务端修改服务器数据表就好了。举几个例子:网络游戏所谓的资源包,就是修改了本地设置文件和服务器角色数据,角色数据服务器上修改表就完成了,本地一些复杂的配置初始化文件,就不要再数据库上改了,直接拿做好的文件替换掉老的,它做个更新程序就是下载资源区替换安装目录文件,或者直接去替换;ERP所谓的更新就是更新Server数据表,把Server数据表关系直接通过Server去完成;网站更新某些插件没有下载更新不了,怎么办?用连接自动下载区更新控件。
还要考虑的是你是怎么加密代码的。追问
要更新文件,在服务器上放好要替换的文件,客户端直接获得新的文件就行。
追答让客户端从服务器下载新文件,保存路径直接去替换客户端安装包里的文件,替换方法可以不让windows提示
追问就是想要这功能,怎么实现啊?
参考技术A 微软有提供Clickonce可以用来做winform程序更新WINFORM中加入WPF控件并绑定数据源实现跨线程自动更新
1. WINFORM中添加两个ElementHost,一个放WPF的Button,一个放WPF的TextBox。其中TextBox与数据源绑定,实现跨线程也可以自动更新,而不会出现WINFORM的TextBox控件与数据源绑定后,存在子线程中更新数据源报错(跨线程更新控件)的情况。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows; // 自行添加支持WPF控件 using System.Windows.Data; // 自行添加支持WPF控件 using System.Windows.Controls; // 自行添加支持WPF控件 using System.Windows.Forms; using System.IO.Ports; using System.Net; using System.Net.Sockets; using System.Threading; namespace UI { public partial class MainForm : Form { public class DataSource : INotifyPropertyChanged { private int _index; public int Index { get { return _index; } set { _index = value; if (PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Index")); } } } public event PropertyChangedEventHandler PropertyChanged; } System.Windows.Data.Binding _bind; Thread _thread; DataSource _dataSource; bool _run; public MainForm() { InitializeComponent(); // Create a WPF Button System.Windows.Controls.Button btn = new System.Windows.Controls.Button(); btn.Content = "Button in WPF"; // 修改内容属性 System.Windows.Media.FontFamily font = new System.Windows.Media.FontFamily("Ariel"); // 修改字体属性 btn.FontFamily = font; btn.Click += new System.Windows.RoutedEventHandler(btn_Click); // 增加事件响应 // Add it to ElementHost elementHost1.Child = btn; // Create a WPF TextBox System.Windows.Controls.TextBox txtBox = new System.Windows.Controls.TextBox(); txtBox.Text = "TextBox in WPF"; // 修改内容属性 txtBox.FontFamily = font; _dataSource = new DataSource(); // System.Windows.Data.Binding方式 _bind = new System.Windows.Data.Binding(); _bind.Source = _dataSource; _bind.Path = new PropertyPath("Index"); _bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; txtBox.SetBinding(System.Windows.Controls.TextBox.TextProperty, _bind); // 增加数据源绑定 // Add it to ElementHost elementHost2.Child = txtBox; // 子线程运行 _run = true; _thread = new Thread(Test); _thread.Start(); } void Test() { while (_run) { _dataSource.Index++; Thread.Sleep(100); } } private void btn_Click(object sender, EventArgs e) { System.Windows.Forms.MessageBox.Show("WPF button clicked!"); } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { _run = false; if (_thread != null) { _thread.Join(); _thread = null; } } } }
以上是关于winform安装后,自动更新的主要内容,如果未能解决你的问题,请参考以下文章
c#写的winform设置了启动检查更新,又设置了开机自动启动,开机自启动时不能启动更新程序
C#winform开发的C/S结构的程序,怎样实现自动升级的功能!望高手指教!
WINFORM中加入WPF控件并绑定数据源实现跨线程自动更新