狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

WinForm 自動(dòng)更新程序(二)

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

     第二步理論上我們?cè)搶懣蛻舳肆耍牵诖酥埃枰冉榻B下一些必要的方法以及操作。

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

然后就是傳參調(diào)用,在Program文件中做了以下代碼操作。所以調(diào)用的時(shí)候需要將主程序的執(zhí)行目錄以及進(jìn)程名傳過(guò)來(lái),作用分別是再更新完后自動(dòng)啟動(dòng)以及更新之前把相關(guān)的進(jìn)程殺掉以便完成更新。

同時(shí)可以看到在更新的時(shí)候,有一個(gè)圖片旋轉(zhuǎn)的動(dòng)作,也一并放到此篇文章中。


開發(fā)環(huán)境:.NET Core 3.1

開發(fā)工具: Visual Studio 2019

實(shí)現(xiàn)代碼:

//更新程序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> /// 旋轉(zhuǎn)圖片 /// </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; } }

實(shí)現(xiàn)效果:


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


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