iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用c#怎么自动更新程序
  • 768
分享到

使用c#怎么自动更新程序

2023-06-14 06:06:36 768人浏览 安东尼
摘要

使用C#怎么自动更新程序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。主要功能介绍实现文件的自动更新。主要功能:支持整包完全更新,即客户端只需输入一个服务器地址,即可下载所有文

使用C#怎么自动更新程序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

主要功能介绍

实现文件的自动更新。主要功能:

  1. 支持整包完全更新,即客户端只需输入一个服务器地址,即可下载所有文件。

  2. 支持增量更新,即只更新指定的某几个文件。

  3. 支持自动更新程序的更新

更新界面如图:

使用c#怎么自动更新程序

客户端

main方法入口

/// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() {  //在主程序中 更新替换自动升级程序  //ReplaceAutoUpgrade();  bool isEnterMain = false;  try  {  //设置默认更新地址,如果不设置,后面会从配置文件,或界面上进行设置  UpgradeHelper.Instance.DefaultUrl = "Http://localhost:17580";  if (UpgradeHelper.Instance.Local_UpgradeModel != null)  {   UpgradeHelper.Instance.UpgradeUrl = UpgradeHelper.Instance.Local_UpgradeModel.UpgradeUrl;  }  if (UpgradeHelper.Instance.WillUpgrades.Count == 0 && UpgradeHelper.Instance.Local_UpgradeModel != null)  {   //没有待更新,并且本地版本信息文件不为空,则直接启动主程序   bool isSucced = UpgradeHelper.StartRunMain(UpgradeHelper.Instance.Local_UpgradeModel.RunMain);   if (isSucced)   {   Application.Exit();   }   else   {   //清理版本信息 以便重新检测版本   UpgradeHelper.Instance.ClearUpgradeModel();   isEnterMain = true;   }  }  else  {   isEnterMain = true;  }  }  catch (Exception ex)  {  isEnterMain = true;  MessageBox.Show("运行更新程序异常:\n" + ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);  }  if (isEnterMain)  {  //进入更新主界面  Application.EnableVisualStyles();  Application.SetCompatibleTextRenderingDefault(false);  Application.Run(new FrmUpdate());  } }

主窗体代码

public partial class FrmUpdate: FORM{ /// <summary> /// 构造函数 /// </summary> /// <param name="tempPath"></param> /// <param name="updateFiles"></param> public FrmUpdate() {  InitializeComponent(); } /// <summary> /// 窗体加载事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmUpdate_Load(object sender, EventArgs e) {  try  {  //加载服务器地址  txtHostUrl.Text = UpgradeHelper.Instance.UpgradeUrl;  BeginUpgrade();  }  catch(Exception ex)  {  Output("初始化异常:" + ex.Message);  } } /// <summary> /// 手动更新 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void butBegin_Click(object sender, EventArgs e) { try {  if(string.IsNullOrWhiteSpace(txtHostUrl.Text))  {  Output("请先输入服务器地址!");  return;  }  UpgradeHelper.Instance.UpgradeUrl = txtHostUrl.Text.Trim();  //清理版本信息 以便重新检测版本  UpgradeHelper.Instance.ClearUpgradeModel();  BeginUpgrade(); } catch(Exception ex) {  Output("更新异常:" + ex.Message); } } private void BeginUpgrade() {  try  {  if(string.IsNullOrWhiteSpace(UpgradeHelper.Instance.UpgradeUrl))  {   return;  }  if(!(UpgradeHelper.Instance.UpgradeUrl.StartsWith("http://") || UpgradeHelper.Instance.UpgradeUrl.StartsWith("https://")))  {   Output("错误的服务器地址,地址必须以http://或者https://开头");   return;  }  //判断是否有更新  if(UpgradeHelper.Instance.WillUpgrades.Count > 0 && UpgradeHelper.Instance.Server_UpgradeModel != null)  {   SetWinControl(false);   //杀死主进程   UpgradeHelper.KillProcess(UpgradeHelper.Instance.Server_UpgradeModel.RunMain);   RunUpgrade(); //启动更新  }  }  catch(Exception ex)  {  Output("更新异常:" + ex.Message);  } } /// <summary> /// 启动更新 /// </summary> private void RunUpgrade() {  //启动更新  SetCaption(string.Format("共需更新文件{0}个,已更新0个。正在更新下列文件:", UpgradeHelper.Instance.WillUpgrades.Count));  Task.Factory.StartNew(() =>  {  string curFile = "";  try  {   int idx = 0;   foreach(KeyValuePair < string, string > item in UpgradeHelper.Instance.WillUpgrades)   {    curFile = item.Key;    string filePath = string.Format("{0}\\{1}", Application.StartupPath, item.Key);    if(item.Key.IndexOf(UpgradeHelper.Instance.Server_UpgradeModel.AutoUpgrade) >= 0)    {    //如果当前文件为更新主程序    filePath = string.Format("{0}\\AutoUpgradeTemp\\{1}", Application.StartupPath, item.Key);    }    string directory = Path.GetDirectoryName(filePath);    if(!Directory.Exists(directory))    {    Directory.CreateDirectory(directory);    }    MyWEBResquest.DownloadFile(UpgradeHelper.Instance.UpgradeUrl, item.Key, filePath);    idx++;    SetCaption(string.Format("共需更新文件{0}个,已更新{1}个。更新文件列表:", UpgradeHelper.Instance.WillUpgrades.Count, idx));    Output(string.Format("更新文件{0}完成", curFile));   }   //保存版本文件   File.WriteAllText(UpgradeHelper.Instance.Local_UpgradeXmlPath, UpgradeHelper.Instance.Server_UpgradeXml);   SetCaption(string.Format("更新完成,共更新文件{0}个", UpgradeHelper.Instance.WillUpgrades.Count));   Output(string.Format("更新完成,共更新文件{0}个", UpgradeHelper.Instance.WillUpgrades.Count));   //下载完成后处理   UpgradeHelper.StartRunMain(UpgradeHelper.Instance.Server_UpgradeModel.RunMain);   //退出当前程序   ExitCurrent();  }  catch(Exception ex)  {   Output(string.Format("更新文件{0}异常:{1}", curFile, ex.Message));   SetWinControl(true);  }  }); } /// <summary> /// 设置界面控件是否可用 /// </summary> /// <param name="enabled"></param> private void SetWinControl(bool enabled) {  if(this.InvokeRequired)  {  Action < bool > d = new Action < bool > (SetWinControl);  this.Invoke(d, enabled);  }  else  {  txtHostUrl.Enabled = enabled;  butBegin.Enabled = enabled;  } } /// <summary> /// 退出当前程序 /// </summary> private void ExitCurrent() { if(this.InvokeRequired) {  Action d = new Action(ExitCurrent);  this.Invoke(d); } else {  Application.Exit(); } }# region 日志输出 /// <summary> /// 设置跟踪状态 /// </summary> /// <param name="caption"></param> private void SetCaption(string caption) {  if(this.lblCaption.InvokeRequired)  {  Action < string > d = new Action < string > (SetCaption);  this.Invoke(d, caption);  }  else  {  this.lblCaption.Text = caption;  } } /// <summary> /// 设置跟踪状态 /// </summary> /// <param name="caption"></param> private void Output(string log) { if(this.txtLog.InvokeRequired) {  Action < string > d = new Action < string > (Output);  this.Invoke(d, log); } else {  txtLog.AppendText(string.Format("{0}:{1}\r\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), log));  txtLog.ScrollToCaret(); } } private void ClearOutput() { if(this.txtLog.InvokeRequired) {  Action d = new Action(ClearOutput);  this.Invoke(d); } else {  txtLog.Text = ""; } }# endregion private void FrmUpdate_FormClosing(object sender, FormClosingEventArgs e) { if(e.CloseReason == CloseReason.UserClosing) {  if(MessageBox.Show("升级未完成,退出后将导致软件无法正常使用,你确定要退出吗?", "退出提示", MessageBoxButtons.YesNo) != System.windows.Forms.DialogResult.Yes)  {  //取消"关闭窗口"事件  e.Cancel = true;  } } }}

更新帮助类

/// <summary>/// 更新帮助类/// </summary>public class UpgradeHelper{ /// <summary> /// 默认服务器地址 /// 在配置文件中未找到地址时,使用此地址进行更新 /// </summary> public string DefaultUrl { get; set; } public string _upgradeUrl; /// <summary> /// 获取或设置服务器地址 /// </summary> public string UpgradeUrl { get {  if(string.IsNullOrWhiteSpace(_upgradeUrl))  {  return DefaultUrl;  }  return _upgradeUrl; } set {  _upgradeUrl = value; } } /// <summary> /// 本地配置文件路径 /// </summary> public string Local_UpgradeXmlPath = Path.Combine(Application.StartupPath, "UpgradeList.xml"); private UpgradeModel _local_UpgradeModel; /// <summary> /// 本地版本信息 /// </summary> public UpgradeModel Local_UpgradeModel { get {  try  {  if(_local_UpgradeModel == null)  {   if(File.Exists(Local_UpgradeXmlPath))   {   _local_UpgradeModel = new UpgradeModel();   _local_UpgradeModel.LoadUpgrade(File.ReadAllText(Local_UpgradeXmlPath));   }  }  return _local_UpgradeModel;  }  catch(Exception ex)  {  throw new Exception(string.Format("获取本地版本文件UpgradeList.xml异常:{0}", ex.Message));  } } } private UpgradeModel _server_UpgradeModel; /// <summary> /// 服务器版本信息 /// </summary> public UpgradeModel Server_UpgradeModel { get {  try  {  if(_server_UpgradeModel == null && !string.IsNullOrWhiteSpace(UpgradeUrl))  {   string resXml = MyWebResquest.GetUpgradeList(UpgradeUrl);   if(!string.IsNullOrWhiteSpace(resXml))   {   _server_UpgradeModel = new UpgradeModel();   _server_UpgradeModel.LoadUpgrade(resXml);   _server_UpgradeXml = resXml;   }  }  return _server_UpgradeModel;  }  catch(Exception ex)  {  throw new Exception(string.Format("获取服务端版本文件UpgradeList.xml异常:{0}", ex.Message));  } } } private string _server_UpgradeXml; /// <summary> /// 服务端版本配置xml /// </summary> public string Server_UpgradeXml { get {  return _server_UpgradeXml; } } private Dictionary < string, string > _willUpgrades; /// <summary> /// 待更新文件列表,如果为0,则表示不需要更新 /// </summary> public Dictionary < string, string > WillUpgrades {  get  {  if(_willUpgrades == null)  {   _willUpgrades = new Dictionary < string, string > ();   //如果服务器端未获取到版本信息 则不更新   if(Server_UpgradeModel != null)   {   if(Local_UpgradeModel == null) //本地版本信息为空 全部更新   {    _willUpgrades = Server_UpgradeModel.DictFiles;   }   else   {    //对比需要更新的文件    foreach(var item in Server_UpgradeModel.DictFiles)    {    //如果找到    if(Local_UpgradeModel.DictFiles.ContainsKey(item.Key))    {     //如果版本不匹配     if(Local_UpgradeModel.DictFiles[item.Key] != item.Value)     {     _willUpgrades.Add(item.Key, item.Value);     }    }    else    {     //没有找到     _willUpgrades.Add(item.Key, item.Value);    }    }   }   }  }  return _willUpgrades;  } } /// <summary> /// 清空版本信息 /// </summary> public void ClearUpgradeModel() { if(File.Exists(Local_UpgradeXmlPath)) {  try  {  string xmlStr = File.ReadAllText(Local_UpgradeXmlPath);  XmlDocument xmlDoc = new XmlDocument();  xmlDoc.LoadXml(xmlStr);  Xmlnode node = xmlDoc.SelectSingleNode("Upgrade/Files");  if(node != null && node.ChildNodes.Count > 0)  {   node.RemoveAll();  }  File.WriteAllText(UpgradeHelper.Instance.Local_UpgradeXmlPath, xmlDoc.InnerXml);  }  catch(Exception)  {} } _local_UpgradeModel = null; _server_UpgradeModel = null; _willUpgrades = null; }# region 单例对象 private static UpgradeHelper _instance; /// <summary> /// 单例对象 /// </summary> public static UpgradeHelper Instance { get {  if(_instance == null)  {  _instance = new UpgradeHelper();  //初始化本地配置文件,以及服务器地址  if(_instance.Local_UpgradeModel != null)  {   _instance.UpgradeUrl = _instance.Local_UpgradeModel.UpgradeUrl;  }  }  return _instance; } }# endregion# region 静态方法 /// <summary> /// 启动主程序 /// </summary> /// <param name="fileName"></param> public static bool StartRunMain(string fileName) {  string fullPath = fileName;  try  {  Process process = GetProcess(fileName);  if(process != null) //以及存在运行中的主进程  {   return true;  }  fullPath = string.Format("{0}\\{1}", Application.StartupPath, fileName);  ProcessStartInfo main = new ProcessStartInfo(fullPath);  Process.Start(fullPath);  return true;  }  catch(Exception ex)  {  MessageBox.Show(string.Format("主程序{0}调用失败:\n{1}", fullPath, ex.Message), "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);  }  return false; } /// <summary> /// 杀死进程 /// </summary> /// <param name="process"></param> public static void KillProcess(string processName) {  if(string.IsNullOrWhiteSpace(processName)) return;  processName = processName.ToLower();  processName = processName.Replace(".exe", "");  //杀死主进程  Process[] processes = Process.GetProcesses();  foreach(Process process in processes)  {  if(!string.IsNullOrWhiteSpace(process.ProcessName))  {   if(process.ProcessName.ToLower() == processName)   {   process.Kill();   }  }  } } /// <summary> /// 获取进程 /// </summary> /// <param name="pName"></param> /// <returns></returns> public static Process GetProcess(string pName) { if(string.IsNullOrWhiteSpace(pName)) return null; pName = pName.ToLower(); pName = pName.Replace(".exe", ""); //杀死主进程 Process[] processes = Process.GetProcesses(); foreach(Process process in processes) {  if(!string.IsNullOrWhiteSpace(process.ProcessName))  {  if(process.ProcessName.ToLower() == pName)  {   return process;  }  } } return null; }# endregion}

版本xml文件解析

public class UpgradeModel{ /// <summary> /// 初始化对象 /// </summary> /// <param name="xml"></param> public void LoadUpgrade(string xml) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); //读取UpgradeUrl XmlNode node = xmlDoc.SelectSingleNode("//UpgradeUrl"); if(node != null) {  this.UpgradeUrl = node.InnerText; } //读取RunMain node = xmlDoc.SelectSingleNode("//RunMain"); if(node != null) {  this.RunMain = node.InnerText; } //读取RunMain node = xmlDoc.SelectSingleNode("//AutoUpgrade"); if(node != null) {  this.AutoUpgrade = node.InnerText; } //读取Files node = xmlDoc.SelectSingleNode("Upgrade/Files"); this.DictFiles = new Dictionary < string, string > (); if(node != null && node.ChildNodes.Count > 0) {  foreach(XmlNode item in node.ChildNodes)  {  if(item.Name != "#comment")  {   string name = GetNodeAttrVal(item, "Name");   string version = GetNodeAttrVal(item, "Version");   if(!this.DictFiles.ContainsKey(name))   {   this.DictFiles.Add(name, version);   }  }  } } } private string GetNodeAttrVal(XmlNode node, string attr) {  if(node != null && node.Attributes != null && node.Attributes[attr] != null)  {  string val = node.Attributes[attr].Value;  if(!string.IsNullOrWhiteSpace(val))  {   return val.Trim();  }  return val;  }  return string.Empty; } /// <summary> /// 服务器地址 /// </summary> public string UpgradeUrl { get; set; } /// <summary> /// 更新完成后运行的主程序名称 /// </summary> public string RunMain { get; set; } /// <summary> /// 更新程序名称 /// </summary> public string AutoUpgrade { get; set; } /// <summary> /// 文件列表 /// string 文件名 /// string 版本号 /// </summary> public Dictionary < string, string > DictFiles { get; set; }}

服务端

服务端主Xml版本文件,包含所有的项目文件,客户端根据每个文件的版本号进行判断是否需要更新。如果需只更新某几个文件,则将对应文件的版本号更改只更高的版本号即可

版本xml文件

<?xml version="1.0" encoding="utf-8" ?><Upgrade> <!--服务器地址--> <UpgradeUrl>http://localhost:17580</UpgradeUrl> <!--更新完成后运行的主程序名称--> <RunMain>ClientMain.exe</RunMain> <!--更新程序名称--> <AutoUpgrade>AutoUpgrade.exe</AutoUpgrade> <Files> <!--更新文件列表,以Version为标志,当Version改变时,客户端启动会自动更新。子路径格式:\image\index.jpg--> <File Version="01" Name="\image\index.jpg" /> <File Version="01" Name="ClientMain.exe" /> <File Version="01" Name="AutoUpgrade.exe" /> </Files></Upgrade>

服务端主要提供连个可以通过Http的get或post访问的路径。一个用于获取版本Xml文件内容,一个用于下载指定文件的路径。以下代码示例通过asp.net mvc进行实现。大家可以根据自己技术方式参照实现。

自动升级服务Controller

/// <summary>/// 自动升级服务/// </summary>public class UpgradeController: Controller{ // // GET: /Upgrade/ /// <summary> /// 获取更新文件列表 /// </summary> /// <returns></returns> public object UpgradeList() {  string cacheKey = "Upgrade_UpgradeList.xml";  string resStr = CommonLibrary.CacheClass.GetCache < string > (cacheKey);  if(string.IsNullOrWhiteSpace(resStr))  {  string fileName = Server.MapPath(@"~\App_Data\UpgradeList.xml");  if(System.IO.File.Exists(fileName))  {   resStr = System.IO.File.ReadAllText(fileName);   CommonLibrary.CacheClass.SetCacheMins(cacheKey, resStr, 1);  }  }  return resStr; } /// <summary> /// 生成更新文件 /// </summary> /// <returns></returns> public object Create() {  UpgradeFileManager.CreateFiles(Server.MapPath("/App_Data"));  return "ok"; } /// <summary> /// 下载文件 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public object DownloadFile() {  string fileName = PageRequest.GetString("fileName");  fileName = Server.MapPath(string.Format(@"~\App_Data\{0}", fileName));  return File(fileName, "application/octet-stream"); } /// <summary> /// 异常处理 /// </summary> /// <param name="filterContext"></param> protected override void OnException(ExceptionContext filterContext) { filterContext.HttpContext.Response.StatusCode = 400; filterContext.Result = Content(filterContext.Exception.GetBaseException().Message); filterContext.ExceptionHandled = true; }}

版本文件自动生成帮助类

/// <summary>/// 此类主要作用,对于项目文件非常多,自己手动编辑很麻烦,可以采用此方法,指定目录自动生成初始化的版本文件/// </summary>public class UpgradeFileManager{ /// <summary> /// 创建版本文件 /// </summary> /// <param name="path"></param> public static void CreateFiles(string path) {  List < string > dirList = new List < string > ();  GetAllDirt(path, dirList); //获取所有目录  dirList.Add(path);  System.Text.StringBuilder xml = new System.Text.StringBuilder();  xml.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");  xml.AppendLine(" <Files>");  foreach(var diry in dirList)  {  string[] files = Directory.GetFiles(diry);  foreach(string filePath in files)  {   FileInfo info = new FileInfo(filePath);   string name = filePath.Replace(path, "");   if(info.Directory.FullName == path)   {   name = name.Remove(0, 1);   }   xml.AppendLine(string.Format(" <File Version=\"1\" Name=\"{0}\" />", name));  }  }  xml.AppendLine("</Files>");  using(StreamWriter sw = new StreamWriter(Path.Combine(path, "UpgradeList_Temp.xml")))  {  sw.Write(xml);  sw.Close();  } } /// <summary> /// 获取所有子目录 /// </summary> /// <param name="curDir"></param> /// <param name="list"></param> private static void GetAllDirt(string curDir, List < string > list) { string[] dirs = Directory.GetDirectories(curDir); if(dirs.Length > 0) {  foreach(string item in dirs)  {  list.Add(item);  GetAllDirt(item, list);  } } }}

看完上述内容,你们掌握使用c#怎么自动更新程序的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 使用c#怎么自动更新程序

本文链接: https://www.lsjlt.com/news/268538.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用c#怎么自动更新程序
    使用c#怎么自动更新程序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。主要功能介绍实现文件的自动更新。主要功能:支持整包完全更新,即客户端只需输入一个服务器地址,即可下载所有文...
    99+
    2023-06-14
  • c# 如何实现自动更新程序
    目录主要功能介绍客户端main方法入口主窗体代码更新帮助类版本xml文件解析服务端版本xml文件自动升级服务Controller版本文件自动生成帮助类结语主要功能介绍 实现文件的自动...
    99+
    2024-04-02
  • 详解C#WinForm如何实现自动更新程序
    目录前言开发环境开发工具实现代码实现效果前言 在C/S这种模式中,自动更新程序就显得尤为重要,它不像B/S模式,直接发布到服务器上,浏览器点个刷新就可以了。由于涉及到客户端文件,所以...
    99+
    2022-11-13
    C# WinForm自动更新程序 C# WinForm 更新程序 C# 自动更新程序 C# WinForm
  • C#WinForm实现自动更新程序的方法详解
    目录开发环境开发工具实现代码实现效果代码解析这一篇就着重写一下客户端的代码,客户端主要实现的有:启动后检测本地的xml文件,然后发送到服务器获取需要更新的文件以及版本列表。循环下载。...
    99+
    2022-11-13
    C# WinForm自动更新程序 C# WinForm 更新程序 C# 更新程序 C# WinForm
  • Uniapp应用程序中如何实现自动更新
    随着移动应用的快速发展,每天都有数百万的应用程序从各种应用商店推出。由于安全问题和漏洞,无法保障应用的运行稳定性。为了解决这些问题,开发人员必须经常更新他们的应用程序。这就是为什么我们要实现自动更新的原因之一。Uniapp是个多端的开发框架...
    99+
    2023-05-14
  • C#WinForm自动更新程序之文件上传操作详解
    目录前言开发环境开发工具实现代码实现效果前言 更新都写完了,但是要更新文件要怎么操作呢?连接服务器然后上传上去,修改下xml的版本号当然也是可以的,但是还是没有写个程序使用起来方便,...
    99+
    2022-11-13
    C# WinForm自动更新程序 C# WinForm 更新程序 C# 更新程序 C# WinForm
  • win7怎么关闭自动更新?win7关闭自动更新方法
    不知道大家是否和小编有同样的喜好,小编很反感win7的自动更新每次都是关机的时候显示你的系统要更新看着很郁闷,下面小编就教大家怎么关闭win7的自动更新 1、首先我们打开“控制面板“ 2、点击&...
    99+
    2023-06-12
    win7 关闭 自动更新 方法
  • windows驱动程序更新使用日常问题怎么解决
    这篇文章主要介绍“windows驱动程序更新使用日常问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows驱动程序更新使用日常问题怎么解决”文章能帮助大家解决问题。驱动程序怎么更新...
    99+
    2023-06-30
  • c#程序自启动怎么设置
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • Winform使用FTP实现自动更新
    本文实例为大家分享了Winform使用FTP实现自动更新的具体代码,供大家参考,具体内容如下 实现思路:在主程序打开前实现判断是否需要更新(可以通过数据库表记录一下版本号或者别的方式...
    99+
    2024-04-02
  • 怎么关闭windows10自动更新
    这篇文章给大家分享的是有关怎么关闭windows10自动更新的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体步骤如下:使用鼠标右击电脑左下角的开始按钮图标,弹出的界面点击运行打开。或者直接快捷键win+r打开运...
    99+
    2023-06-26
  • 怎么关闭Win10自动更新
    这篇文章主要介绍“怎么关闭Win10自动更新”,在日常操作中,相信很多人在怎么关闭Win10自动更新问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么关闭Win10自动更新”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-01
  • navicat怎么取消自动更新
    通过取消选中 navicat “更新”选项卡中的“自动检查更新”复选框,您可以禁用 navicat 的自动更新功能。 如何取消 Navicat 自动更新 取消 Navicat 自动更新...
    99+
    2024-04-24
    navicat
  • win10自动更新怎么设置
    这篇“win10自动更新怎么设置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win10自动更新怎么设置”文章吧。点击电脑左...
    99+
    2023-07-01
  • 怎么关闭navicat自动更新
    为了禁用 navicat 自动更新功能,请执行以下步骤:取消选中“自动检查更新”复选框。单击“确定”保存更改。之后,navicat 将不再自动检查和下载更新。您可以手动检查更新以确保最新...
    99+
    2024-04-24
    navicat
  • win10怎么恢复自动更新
    要恢复Win10的自动更新,您可以按照以下步骤操作:1. 打开“设置”应用程序。您可以在开始菜单中找到“设置”图标,点击它打开应用程...
    99+
    2023-09-08
    win10
  • Win10怎么关闭自动更新
    这篇“Win10怎么关闭自动更新”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Win10怎么关闭自动更新”文章吧。方法步骤:...
    99+
    2023-06-27
  • windows自动更新怎么关闭
    windows关闭自动更新的方法:1、打开运行。按下Win键+R组合键,或在开始菜单中找到运行;2、输入"services.msc",并点击确定然后打开Windows服务管理器;3、在服务管理器中,找到"Win...
    99+
    2023-08-10
  • bandizip怎么关闭自动更新
    这篇“bandizip怎么关闭自动更新”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ban...
    99+
    2023-04-07
    bandizip
  • ubuntu怎么禁止自动更新
    今天小编给大家分享一下ubuntu怎么禁止自动更新的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.打开终端命令行模式。2....
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作