自己的电脑做服务器建立网站的方法,商城类的网站一般怎么做,网站怎么容易被百度收录,网站开发与维护c#更新工具,wpf开发,所有windows桌面程序均可使用,基于.net 4.0,最低支持windos xp系统
更新工具优点
使用简单批量更新跨版本更新数据备份手动还原数据体积小
程序更新使用效果 使用简单
只需添加两个类,以及三个路径的指定,就可以从任何地方下载更新包,并解压到主程序目录…c#更新工具,wpf开发,所有windows桌面程序均可使用,基于.net 4.0,最低支持windos xp系统
更新工具优点
使用简单批量更新跨版本更新数据备份手动还原数据体积小
程序更新使用效果 使用简单
只需添加两个类,以及三个路径的指定,就可以从任何地方下载更新包,并解压到主程序目录中,自动启动
批量更新
不管你从后台拿到了多少个升级包,都能一次性完成升级(以下升级包为本地测试数据)
手动还原数据至上一版本 体积小
依赖少,占用空间少
如何使用
添加类ClientParameter.cs public class ClientParameter{/// summary/// 1:MainApp 2:UpdateApp/// /summarypublic int AppType { get; set; } 1;/// summary/// 启动程序名称(可以加上相对路径)/// /summarypublic string AppName { get; set; }/// summary/// 下载的内容放到哪里/// /summarypublic string DownLoadPath { get; set; }/// summary/// 解压的内容放到哪里/// /summarypublic string UnZipPath { get; set; }/// summary/// 备份地址/// /summarypublic string BackUpPath { get; set; }/// summary/// 客户端版本当前/// /summarypublic string ClientVersion { get; set; }/// summary/// 日志访问地址/// /summarypublic string UpdateLogUrl { get; set; }/// summary/// 是否修改目标版本(通过修改version.ini的方式统一控制版本)/// /summarypublic bool IsUpdateVersion { get; set; } true;/// summary/// 是否是还原版本/// /summarypublic bool IsRestore { get; set; } false;/// summary/// 多版本更新/// /summarypublic ListUpdateVersion UpdateVersions { get; set; }}public class UpdateVersion{public UpdateVersion(string version, string url, string name, bool isUpdate true){Version version;Url url;Name name;IsUpdate isUpdate;}public UpdateVersion(string version, string url, bool isUpdate true){Version version;Url url;IsUpdate isUpdate;}/// summary/// 更新的包名/// /summarypublic string Name { get; set; }/// summary/// 更新的版本/// /summarypublic string Version { get; set; }/// summary/// 包地址/// /summarypublic string Url { get; set; }/// summary/// 是否更新/// /summarypublic bool IsUpdate { get; set; }}添加类UpdateUtil.cs public static class UpdateUtil{#region API函数声明-必须放在类中[DllImport(kernel32)]//返回0表示失败非0为成功private static extern long WritePrivateProfileString(string section, string key,string val, string filePath);[DllImport(kernel32)]//返回取得字符串缓冲区的长度private static extern long GetPrivateProfileString(string section, string key,string def, StringBuilder retVal, int size, string filePath);#endregionpublic static string Serialize(object obj){if (obj null) return string.Empty;var json JsonConvert.SerializeObject(obj);var bytes Encoding.Default.GetBytes(json);var base64str Convert.ToBase64String(bytes);return base64str;}public static T DeserializeT(string str){var obj default(T);if (string.IsNullOrEmpty(str)) return obj;try{byte[] bytes Convert.FromBase64String(str);var json Encoding.Default.GetString(bytes);var result JsonConvert.DeserializeObjectT(json);return result;}catch (Exception){return default;}}#region 写Ini文件/// summary/// 将内容写入指定的ini文件中/// /summary/// param nameSectionini文件中的节名/param/// param nameKeyini文件中的键/param/// param nameValue要写入该键所对应的值/param/// param nameiniFilePathini文件路径/param/// returns/returnspublic static bool Write(string Section, string Key, string Value, string iniFilePath){if (!File.Exists(iniFilePath)){try{FileStream stream File.Open(iniFilePath, FileMode.Create, FileAccess.Write);//stream.Seek(0, SeekOrigin.Begin);//stream.SetLength(0); //清空txt文件stream.Dispose();stream.Close();}catch (Exception ex){Console.WriteLine(ex);}}if (File.Exists(iniFilePath)){long OpStation WritePrivateProfileString(Section, Key, Value, iniFilePath);if (OpStation 0){return false;}else{return true;}}else{return false;}}#endregion/// summary/// 读取ini文件内容的方法/// /summary/// param nameSectionini文件的节名/param/// param nameKeyini文件对应节下的健名/param/// param nameNoTextini文件对应节对应健下无内容时返回的值/param/// param nameiniFilePath该ini文件的路径/param/// returns/returnspublic static string Read(string Section, string Key, string NoText, string iniFilePath){if (File.Exists(iniFilePath)){StringBuilder temp new StringBuilder(1024);GetPrivateProfileString(Section, Key, NoText, temp, 1024, iniFilePath);return temp.ToString();}else{return null;}}}
生成的程序项目结构如下 主程序生成至current文件夹下,更新程序生成至update文件夹下 执行更新处添加如下代码 ClientParameter clientParameter new ClientParameter {AppName appName,BackUpPath backUpPath,DownLoadPath downLoadPath,//下载包临时存放位置 可默认UnZipPath unZipPath,//解压文件存放位置,可默认UpdateLogUrl ,//更新成功后会自动跳转至该路径 为空则不跳转UpdateVersions new ListUpdateVersion {new UpdateVersion(1.0.2,http://127.0.0.1:5000/v3.23.12_202312051713.zip),new UpdateVersion(1.0.3,http://127.0.0.1:5000/Avalonia-11.0.0-preview4.zip),//new UpdateVersion(1.0.4,http://127.0.0.1:5000/Dragablz-master.zip),new UpdateVersion(1.0.5,http://127.0.0.1:5000/EChartsSDK-master.zip),new UpdateVersion(1.0.6,http://127.0.0.1:5000/EChartsNet-master.zip),//new UpdateVersion(1.0.7,http://127.0.0.1:5000/HandyControl-master.zip),new UpdateVersion(1.0.8,http://127.0.0.1:5000/Live-Charts-master.zip),}};string arg UpdateUtil.Serialize(clientParameter);var path directInfo.Parent.FullName \download\Cloud.Update.exe;if (File.Exists(path)){Process.Start(path, arg);Process.GetCurrentProcess().Kill();}关于测试下载环境的搭建
新建 asp.net core webapi 项目 如同取消勾选 program.cs添加静态文件支持 app.UseStaticFiles();重新生成代码 到debug目录下新建wwwroot文件夹 将用来测试的压缩包放到wwwroot文件夹下,注意以.zip的格式结尾 回到程序目录双击启动 在浏览器输入http://localhost:5000/v3.23.12_202312051713.zip,回车测试下载服务是否正常 可以看到成功下载了压缩包,至此下载环境搭建完成 代码地址