91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

WinForm 自動更新程序(二)

admin
2023年2月27日 10:15 本文熱度 1850

     第二步理論上我們該寫客戶端了,但是,在此之前,需要先介紹下一些必要的方法以及操作。

寫代碼還是要盡量的保證通用性,以便以后需要的時候可以拿來稍微改改甚至直接使用。所以在這里我們將自動更新的程序抽象出來,即對于客戶端來說,它只包含三個文件(Autoupdate.dll、Autoupdate.exe、updateList.xml,如果是.NET Framework的話,其實是沒有Autoupdate.dll文件的,就一個exe就足夠了。這也是我為什么一直不用NET Core來寫Winform程序的原因之一);然后將這三個文件放到主程序的目錄中即可。

然后就是傳參調用,在Program文件中做了以下代碼操作。所以調用的時候需要將主程序的執行目錄以及進程名傳過來,作用分別是再更新完后自動啟動以及更新之前把相關的進程殺掉以便完成更新。

同時可以看到在更新的時候,有一個圖片旋轉的動作,也一并放到此篇文章中。


開發環境:.NET Core 3.1

開發工具: Visual Studio 2019

實現代碼:

//更新程序namespace Autoupdate {    static class Program {        /// <summary>        ///  The main entry point for the application.        /// </summary>        [STAThread]        static void Main(string[] args) {            if(args.Length != 1) {                return;            }            var arg = args[0].Split("|*|");            if(arg.Length == 0) {                return;            }            string runPath = arg[0];            string procesName = arg[1];            Process[] processes = Process.GetProcesses();            foreach(Process process in processes) {                if(process.ProcessName == procesName) {                    process.Kill(true);                }            }            Application.SetHighDpiMode(HighDpiMode.SystemAware);            Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            Application.Run(new Form_update(runPath));        }    }}
//主程序namespace Autoupdate.Test {    static class Program {        /// <summary>        ///  The main entry point for the application.        /// </summary>        [STAThread]        static void Main() {
update();
Application.SetHighDpiMode(HighDpiMode.SystemAware); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }

readonly static string updateXml = Application.StartupPath + "updateList.xml"; /// <summary> /// 獲取本地更新地址 /// </summary> /// <returns></returns> static string GetupdateUrl() { XElement xele = XElement.Load(updateXml); string url = xele.Element("url").Value; return url; }
/// <summary> /// 獲取本地更新文件 /// </summary> /// <returns></returns> static string GetupdateFiles() { XDocument xdoc = XDocument.Load(updateXml); var files = from f in xdoc.Root.Element("files").Elements() select new { name = f.Attribute("name").Value, version = f.Attribute("version").Value }; return JsonConvert.SerializeObject(files); }
/// <summary> /// 檢查是否需要更新 /// </summary> /// <returns></returns> static bool Checkupdate() { string url = GetupdateUrl(); HttpResult httpResult = HttpUtil.HttpRequest(new HttpItem(url + "GetupdateFiles", requestData: GetupdateFiles())); if(httpResult.Status) { updateModel_Out output = JsonConvert.DeserializeObject<updateModel_Out>(httpResult.HttpStringData);
if(output.updateList.Count > 0) return true; } return false; }
static void update() { if(Checkupdate()) { string processName = Assembly.GetexecutingAssembly().GetName().Name;
ProcessStartInfo info = new ProcessStartInfo(Application.StartupPath + "Autoupdate.exe", Process.GetCurrentProcess().MainModule.FileName + "|*|" + processName); Process.Start(info); Environment.Exit(0); } } }}

public static class ImageEx { /// <summary> /// 旋轉圖片 /// </summary> /// <param name="image"></param> /// <param name="angle"></param> /// <returns></returns> public static Image RotateImage(this Image image, float angle) { if(image == null) throw new ArgumentNullException("image"); float dx = image.Width / 2.0f; float dy = image.Height / 2.0f;
Bitmap rotatedBmp = new Bitmap(image.Width, image.Height); rotatedBmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
Graphics g = Graphics.fromImage(rotatedBmp); g.TranslateTransform(dx, dy); g.RotateTransform(angle); g.TranslateTransform(-dx, -dy); g.DrawImage(image, new PointF(0, 0));
g.Dispose(); return rotatedBmp; } }

實現效果:


代碼解析:這里可以關注下在主程序中的獲取更新地址以及文件等方法,其實我這里是有重復判斷的,即在主程序中判斷了一遍,還會在更新程序中判斷一遍,如果覺得不需要,可以執行選擇去掉,全部交給更新程序去做。但是也就需要統一放在更新程序的入口中做處理了,相對而言,我覺得寫兩遍還是很方便。


該文章在 2023/2/27 10:15:34 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 日韩福利在线观看 | 国产精品自 | 国产精品亚洲专区 | 国产一区二区高清 | 精品国产欧美精品v | 成人看片网站 | 美味a级片| 国产精品成人观看视 | 日韩免费视频播播 | 国产精品乱熟女 | 日本xxxx| 国产区免费视频 | 国产高清在线精 | 国产在线短视频 | 国产午夜亚洲精品 | 日韩免费网页版视频 | 日韩精品在线高清 | 国内精品在线国内 | 日韩成人午夜电影 | 国产剧情一区二区 | 韩国三级中文字 | 成人免费看一级特黄 | 国产精品十七区 | 伦理秋霞电影网 | 97视频日韩 | 国产尤物在线观 | 国产日韩网址导航 | 国产日韩手 | 国产资源在线观 | 91永久视频在线 | 国产凸凹视频 | 国产一区欧美二区 | 人与狗性| 国产91精品一区二 | 日本成人精品 | 日韩视频免 | 成人三级网站在 | 最新免费观看男女啪啪视频 | 日韩在线欧美 | 国内精品自产拍 | 69一区二区|