-
vb datagrid 某一格子的点击事件_动态 | 用VB编程制作的动态变化程序
2020-12-14 15:37:05今天,我们就共同来学习如何用VB编程制作动态变化程序。用到的主要知识有:窗体属性、颜色函数、时钟控件、图形方法。首先,我们需要在VB中新建一个exe工程,然后在窗体上添加一个Timer(时钟)控件,...点击关注获得更多VB精彩内容!
往期精彩干货总结 | VB编程语言基础知识点总结
技巧 | VB编程实现的语音自动朗读程序
数据库 | VB开发的超市收银串口通信支付软件VB编程功能强大、易学实用。
今天,我们就共同来学习如何用VB编程制作动态变化程序。
用到的主要知识有:
窗体属性、颜色函数、时钟控件、图形方法。
首先,我们需要在VB中新建一个exe工程,然后在窗体上添加一个Timer(时钟)控件,添加完毕后,即可进入代码窗口编写代码来实现我们今天的程序了。程序实现代码如下:
Const PI As Single = 3.1415926 '定义常量圆周率PI
Private Sub myPaint() '自定义绘制图形曲线过程
Dim i, j, x, y
Scale (-300, 300)-(300, -300)
Cls
For i = 0 To 200 Step 20 '双重For循环
For j = 0 To 2 * PI + 0.1 Step PI / 32
x = i * Cos(j) ^ 3
y = i * Sin(j) ^ 3
Line -(x, y)
Next j
Next
End Sub
Private Sub Form_Load() '窗体载入时,设置时间间隔为500ms
Timer1.Interval = 500
End Sub
Private Sub Timer1_Timer() '时钟Timer事件指定动态前景色、背景色
Me.BackColor = QBColor(Rnd * 12)
Me.ForeColor = QBColor(Rnd * 12)
Call myPaint
End Sub
点击下面视频,查看程序完整运行变化。
如果你有VB学习或者程序开发中的问题,可以添加老师微信号:vbyjk521 ,随时在线交流解答。
现有VB从基础入门到精通以及VB综合开发讲解的视频教程录制完毕,含源代码,可以快速帮助掌握VB编程。
长按上图,添加老师微信
更多VB编程干货,尽在跟我学VB
-
【android免root脚本制作】自动坐标操作手机——京东金融程序金果摇钱树自动收金果
2019-06-18 20:46:33今天618,大伙都在京东金融程序金果摇钱树收金果,所以给大家介绍如何简单制作一个,自动点击手机指定位置的脚本。该简单的案例实现效果也是基于auto.js上的,如果对auto.js不清楚的话可以看看基础篇。 不多说,...今天618,大伙都在京东金融程序金果摇钱树收金果,所以给大家介绍如何简单制作一个,自动点击手机指定位置的脚本。该简单的案例实现效果也是基于auto.js上的,如果对auto.js不清楚的话可以看看基础篇。
不多说,先上最简单代码:
首先打开Auto.js右下角加号新建一个js文件(javascript语言)。然后在文件第一行输入click(x,y);这就是我们的点击功能。然后把其中x换成你要点的坐标的横坐标,y换成你要点的坐标的纵坐标即可。比如,我要点击坐标x500,y1200的地方,那么就输入click(500,1200);即可。
关于,如何获得你要点击的点的横坐标与纵坐标,首先打开:手机-设置-开发者选项-指针位置,这时,你手点击在屏幕上时,最上面一排,都会显示出,你点击的位置的坐标。这个坐标是已手机左上角为坐标系原点,一直延伸像右下角,大小等于你手机分辨率的一个坐标系。
仅仅点击,可能并不能达到大部分所有脚本的需求。sleep(t)这个功能能让脚本从上往下运行到这一步时,暂停一段时间,再继续运行下去。t改成需要暂停运行的毫秒数,1秒=1000毫秒 ,数字是整数,如果你写的不是整数,程序会自动四舍五入凑整。 比如暂停十分钟,我们可以先算出来,10分钟600秒,就是600 000毫秒,那么程序就是sleep(600000); 当然我们可以不需要自己算出来,直接在括号内写一个算式即可,* 代表×的意思,可以直接写sleep(10*60*1000);这样,程序运行时,会先自动把,括号内的算式算出来,再运行等待。
教学实例:我们比如想在晚上12点在某QQ群发出签到,却明天有事,必须9点前睡觉。那我们可以写个脚本,等待一段时间后,自动点下,9点距离12点有三个小时那么第一行等待写sleep(3*60*60*1000);然后写点击发送,在小编手机上,发送按钮的坐标在1000,150,所以点击命令为click(1000,150);连起来后,在晚上9点运行,切换到qq签到界面就好啦。
学会了这个方法,相信各位,只要能记录好等待时间,做出,自动玩跳舞的线之类的游戏的脚本应该没问题了吧。
说完了click点击,我们来讲下一个功能press。
我们在模拟操作的时候,可能不需要单独一下的点击,而是需要长按之类的操作,press正是一个能设置点击下去时间长短的按下功能。语法是press(x,y,t);其中前两个和click一样,设置点击坐标,第三个设置点击时常,单位是毫秒,手机内一般认定半秒,即500毫秒的点击,是长按。
举个例子,长按屏幕500,500的地方两秒:press(500,500,2000);
其实看似click是几乎一瞬间完成点击效果,其实是默认了一个点击时长100毫秒,所以如果想做更快的点击操作,可以用press设置点击时长为1毫秒,代替click功能。
再说一个功能swipe直线滑动。制作脚本时不免还是必须有滑动功能的。比如趣头条自动放文章,火牛视频翻视频之类的功能。语法是swipe(x1,x2,y1,y2,t);前两个为:设置滑动开始的点的坐标,第三四个为设置滑动终止的点的坐标,第五个为滑动总消耗的时间长短。举个例子,从屏幕100,300滑动至600,900总耗时花1秒为:swipe(100,300,600,900,1000);
写个实例,火牛视频,连续三次,每20秒,自动翻一次视频。火牛视频从下往上翻,就差不多从横坐标500的地方,纵坐标从1500滑到1000,耗时半秒差不多就可以了吧。那滑动命令就是swipe(500,1500,500,1000,500);另外等待20秒的命令大家相比都会了吧,直接说sleep(20000);然后这些要运行三遍,那就这两条信息一起复制三份即可,完成内容见下图。
以上就是今天基本要讲的内容,其中click,press,swipe是只有安卓7.0及以上才可以使用,现在大部分手机都到了吧..而且需要无障碍服务权限,不然运行会报错:无障碍服务权限未打开。然后程序直接运行结束,为了防止这种事情发生我们可以在代码开头加一行auto.waitFor();这句话的功能是,获取无障碍服务权限,如果已经有了,那就继续运行下面的代码,如果没有,就跳转到给无障碍服务权限的界面,并且等待给了权限,再继续运行下面的代码。在代码之前申请好运行的权限是一个好习惯。
另外,如果手机没到安卓7.0的朋友们,Auto.js也有方法,就是基于root权限的操作,并且兼容所有安卓版本。点击命令Tap(x,y);用法和click(x,y);完全一样,滑动命令Swipe(x1,x2,y1,y2,t);用法和swipe(x1,x2,y1,y2,t);完全一样,但是基于root权限的操作并没有长按功能,不过各位想一下,如果滑动500毫秒,开始点和结束的点一样,那不就是长按的效果嘛,所以自己可以想想,如何用Swipe代替root权限的长按。
回到京东金融小案例,我们不可能一直停在页面上等自动点击,所以就在设定的时间去启动应用,然后等启动页显示完后将页面下拉到种摇钱树处图片加载到收金果的页面然后再点击收金果,之后退出应用。
再考虑屏幕会熄屏需要亮屏解锁,我的手机有人脸指纹密码三种方式屏幕解锁,自动解锁采用密码输入方式,我的锁屏密码刚好设置的比较简单都是1,所以最终代码如下(今早忘带手机,所以直接贴代码):
threads.start(function(){ while(true){ launchApp("京东金融"); sleep(10000);//启动页缓冲时间 swipe(1000,1700,1000,450,4000);//上滑显示出收金果的链接跳转图片 click(1000,1000); sleep(10000);//跳转链接缓冲 click(550,1260); sleep(2000); back();//退出链接 back();//返回键退出应用 sleep(500);//稍等一小会再按返回键,以防太快无法响应导致无法退出应用 back();//再次返回键退出应用 //shell("am force-stop com.jd.jrapp",true); sleep(600000);//延时,后再循环 if(device.isScreenOn()==false){//熄屏 device.wakeUpIfNeeded();//唤醒设备 device.wakeUp();//亮屏 swipe(1000,1700,1000,450,4000);//上滑显示输密屏幕解锁 for(var i=0;i<8;i++){ click(250,1350); sleep(1000);//以防按太快漏输情况 } sleep(10000); } });
当然还有系统给奖励分享赢金果的情况,可自行添加,此处不再赘述。
-
如何将一个完整项目推到码云_如何做好一个完整的自动化项目?看看资深PLC工程师怎么办!...
2020-12-07 17:47:58点击上方“技成培训”,选择“置顶公众号”17万+工控人关注的微信平台:技术分享、学习交流、工控视频我们学PLC有时候是为了做项目,做项目需要做些什么步骤呢,学习什么知识点,看看老工程师怎么告诉你……一、做一...点击上方“ 技成培训 ”,选择“置顶公众号”
17万+工控人关注的微信平台:技术分享、学习交流、工控视频
我们学PLC有时候是为了做项目,做项目需要做些什么步骤呢,学习什么知识点,看看老工程师怎么告诉你……
一、做一个PLC项目的大体流程如下
❶、熟悉好现场环境和工艺流程
❷、设计出安全可靠的控制方案
❸、画出电气控制原理图
❹、确定好材料,制作材料物资明细表
❺、编写PLC程序,组态监控画面,设计PLC 机柜接线图,并同时制作PLC机柜
❻、沟通甲方,现场施工
❼、现场调试,并完善工艺控制方案
❽、组织甲方验收项目
二、PLC 设计原则
1、最大限度的满足被控对象提出的各项性能指标
为明确控制任务和控制系统应有的功能,设计人员在进行设计前,就应深入现场进行调查研究,搜集资料,与机械部分的设计人员和实际操作人员密切配合,共同拟定电气控制方案,以便协同解决在设计过程中出现的各种问题。
2、确保控制系统的安全可靠
电气控制系统的可靠性就是生命线,不能安全可靠工作的电气控制系统,是不可能长期投入生产运行的。尤其是在以提高产品数量和质量,保证生产安全为目标的应用场合,必须将可靠性放在首位,甚至构成冗余控制系统
3、力求控制系统简单
在能够满足控制要求和保证可靠工作的前提下,应力求控制系统构成简单。只有构成简单的控制系统才具有经济性、实用性的特点,才能做到使用方便和维护容易。
4、留有适当的裕量
考虑到生产规模的扩大,生产工艺的改进,控制任务的增加,以及维护方便的需要,要充分利用PLC易于扩充的特点,在选择PLC的容量(包括存储器的容量、机架插槽数、I/O点的数量等)时,应留有适当的裕量。
三、PLC设计的基本步骤
在进行PLC控制系统设计,尽管有着不同的被控对象和设计任务,设计内容可能涉及诸多方面,又需要和大量的现场输入、输出设备相连接,但是基本内容应包括以下几个方面:
1、明确设计任务和技术条件
设计任务和技术条件一般以设计任务书的方式给出,在设计任务书中,应明确各项设计要求、约束条件及控制方式。因此,设计任务书是整个系统设计的依据。
2、确定用户输入设备和输出设备
用户的输入、输出设备是构成PLC控制系统中,除了作为控制器的PLC本身以外的硬件设备,是进行机型选择和软件设计的依据。因此,要明确输入设备的类型(如控制按钮、行程开关、操作开关、检测元件、保护器件、传感器等)和数量,输出设备的类型(如信号灯、接触器、继电器等执行元件)和数量,以及由输出设备驱动的负载(如电动机、电磁阀等)。并进行分类、汇总。
3、选择PLC的机型
PLC是整个控制系统的核心部件,正确、合理的选择机型对于保证整个系统的技术经济性能指标起着重要的作用。
PLC的选型应包括机型的选择、存储器容量的选择、I/O模板的选择等。
4、分配I/O地址,绘制I/O接线图
通过对用户输入、输出设备的分析、分类和整理,进行相应的I/O地址分配,并据此绘制I/O接线图,至此,基本完成了PLC控制系统的硬件设计。
5、设计控制程序
根据控制任务和所选择的机型以及I/O接线图,一般采用梯形图语言设计系统的控制程序。设计控制程序就是设计应用软件,这对于保证整个系统安全可靠的运行至关重要,必须经过反复调试,使之满足控制要求。
6、必要时设计非标准设备
在进行设备选型时,应尽量选用标准设备。如无标准设备可选,还可能需要设计操作台、控制柜、模拟显示屏等非标准设备。
7、编制控制系统的技术文件
在设计任务完成后,要编制系统的技术文件。技术文件一般应包括设计说明书、使用说明书、I/O接线图和控制程序(如梯形图等)。
四、PLC的选型
选择适当型号的PLC机是设计中至关重要的一步。目前,国内外PLC生产厂家生产的PLC品种已达数百个,其性能各有特点,价格也不尽相同。所以,在设计时,首先要根据机型统一的原则来考虑,尽可能考虑采用与本企业正在使用的同系列的PLC机,以便于学习、掌握、维护的方便性,备品配件的通用性,且可减少编程的投资。在此基础上还要充分考虑下面因素,以便选择最佳型号的PLC机
1、 I/O设备的数量和性质
在选择PLC时,首先应对系统要求的输入、输出有详细的了解,即输入量有多少,输出量有多少,哪些是开关(或数字)量,哪些是模拟量,对于数字型输出量还应了解负载的性质,以选择合适的输出形式(继电器型、晶体管型、双向可控硅型)。在确定了PLC机的控制规模后,还要考虑一定的余量,以适应工艺流程的变动及系统功能的扩充,一般可按10~15%的余量来考虑。另外,还要考虑PLC的结构,从I/O点数的搭配上加以分析,决定选择整体式还是模块式的PLC。
在确定了PLC的输入量和输出量的点数及性质后,就可以进一步确定各种I/O模板的型号和数量。开关量I/O模板的规格标准有4、8、16、32、64点,点数多的模板,每点平均价格相对较低。对开关量I/O模板的外部接线方式可分为隔离式和汇点式,隔离式的每点平均价格较高。如果信号之间不需要隔离,应选用汇点式的I/O模板。在整体式PLC机中,各个I/O端子也有隔离式和汇点式之分,以满足不同电压等级的输入/输出器件的需要。
2、PLC的功能
要根据该系统的控制过程和控制规律,确定PLC机应具有的功能。各个系列不同规格的PLC机所具有的功能并不完全相同。如有些小型PLC只有开关量的逻辑控制功能,而不具备数据处理和模拟量处理功能。当某个系统还要求进行位置控制、温度控制、PID控制等闭环控制时,应考虑采用模板式PLC,并选择相应的特殊功能的I/O模块,否则这些算法都用PLC的梯形图设计,一方面编程困难,另一方面也占用了大量的程序空间。
另外,还应考虑PLC的运算速度,特别是当使用模拟量控制和高速计数器等功能时,应弄清PLC机的最高工作频率是否满足要求。
3、用户程序存储器的容量
合理确定PLC的用户程序存储器的容量,是PLC应用设计及选型中不可缺少的环节。一般说来,用户程序存储器的内存容量与内存利用率、开关量I/O总数、模拟量I/O点数及设计者的编程水平有关。
简单的估算公式:
内存字数=(开关量I/O总点数+模拟量I/O点数 X 16) X 10
式中:每个模拟量通道(或I/O点)相当16个开关量I/O点。在此基础上,可考虑留有20~25%的裕量。对于工艺比较复杂的系统,应适当增加存储器的容量,否则,当控制较复杂、数据处理量大时,可能出现存储器容量不够的问题。
来源:网络,侵删
分享朋友圈,一起学知识!
点击学习电工、PLC、变频伺服、数控机器人等知识。
-
如何使用C#制作软件的升级程序?
2009-07-23 14:21:20长期以来,广大程序员为到底是使用Client/Server,还是使用...然而当一个应用必须要使用C/S结构才能很好的实现其功能的时候,我们该如何解决客户端的部署与自动升级问题?部署很简单,只要点击安装程序即可,难的...长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序可维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素。有很多企业用户就是因为这个原因而放弃使用C/S。然而当一个应用必须要使用C/S结构才能很好的实现其功能的时候,我们该如何解决客户端的部署与自动升级问题?部署很简单,只要点击安装程序即可,难的在于每当有新版本发布时,能够实现自动升级。现在好了,我们的目标很简单,我们希望开发一个与具体应用无关的能够复用的自动升级系统。下面我为大家提供了一套可复用的用C#编写的自动升级系统。
一、实现软件的自动升级存在的困难
第一,为了查找远程服务器上的更新,应用程序必须有查询网络的途径,这需要网络编程、简单的应用程序与服务器通讯的协议。
第二是下载。下载看起来不需要考虑联网的问题,但要考虑下载用户请求的文件,以及在没有用户同意时下载大文件。友好的自动更新应用程序将使用剩余的带宽下载更新。这听起来简单,但却是一个技术难题,幸运的是已经有了解决方法。
第三个考虑因素是使用新版应用程序更换原应用程序的过程。这个问题比较有趣,因为它要求代码运行时将自己从系统删除,有多种办法可以实现该功能,本文程序主要通过比较新旧版本的日期号来实现替换新版本应用程序的功能。
二、实现软件自动在线升级的原理
写两个程序,一个是主程序;一个是升级程序;所有升级任务都由升级程序完成。
1.启动升级程序,升级程序连接到网站,下载新的主程序(当然还包括支持的库文件、XML配置文档等)到临时文件夹;
2.升级程序获取服务器端XML配置文件中新版本程序的更新日期或版本号或文件大小;
3.升级程序获取原有客户端应用程序的最近一次更新日期或版本号或文件大小,两者进行比较;如果发现升级程序的日期大于原有程序的最新日期,则提示用户是否升级;或者是采用将现有版本与最新版本作比较,发现最新的则提示用户是否升级;也有人用其它属性如文件大小进行比较,发现升级程序的文件大小大于旧版本的程序的大小则提示用户升级。本文主要采用比较新旧版本更新日期号来提示用户升级。
4.如果用户选择升级,则获取下载文件列表,开始进行批量下载文档;
5.升级程序检测旧的主程序是否活动,若活动则关闭旧的主程序;
6.删除旧的主程序,拷贝临时文件夹中的文件到相应的位置;
7.检查主程序的状态,若状态为活动的,则启动新的主程序;
8.关闭升级程序,升级完成。
三、用C#实现在线升级的关键步骤
这里我主要使用日期信息来检测是否需要下载升级版本。
1.准备一个XML配置文件
名称为AutoUpdater.xml,作用是作为一个升级用的模板,显示需要升级的信息。
以下为引用的内容:
<?xml version="1.0"?> //xml版本号
<AutoUpdater>
<URLAddres URL="http://192.168.198.113/vbroker/log/"/>//升级文件所在服务器端的网址
<UpdateInfo>
<UpdateTime Date = "2005-02-02"/> //升级文件的更新日期
<Version Num = "1.0.0.1"/>//升级文件的版本号
</UpdateInfo>
<UpdateFileList>//升级文件列表
<UpdateFile FileName = "aa.txt"/> //共有三个文件需升级
<UpdateFile FileName = "VB40.rar"/>
<UpdateFile FileName = "VB4-1.CAB"/>
</UpdateFileList>
<RestartApp>
<ReStart Allow = "Yes"/> //允许重新启动应用程序
<AppName Name = "TIMS.exe"/> //启动的应用程序名
</RestartApp>
</AutoUpdater>
从以上XML文档中可以得知升级文档所在服务器端的地址、升级文档的更新日期、需要升级的文件列表,其中共有三个文件需升级:aa.txt、VB40.rar、VB4-1.CAB。以及是否允许重新启动应用程序和重新启动的应用程序名
2.获取客户端应用程序及服务器端升级程序的最近一次更新日期
通过GetTheLastUpdateTime()函数来实现。
以下为引用的内容:private string GetTheLastUpdateTime(string Dir)
{
string LastUpdateTime = "";
string AutoUpdaterFileName = Dir + @"\AutoUpdater.xml";
if(!File.Exists(AutoUpdaterFileName))
return LastUpdateTime;
//打开xml文件
FileStream myFile = new FileStream(AutoUpdaterFileName,FileMode.Open);
//xml文件阅读器
XmlTextReader xml = new XmlTextReader(myFile);
while(xml.Read())
{
if(xml.Name == "UpdateTime")
{
//获取升级文档的最后一次更新日期
LastUpdateTime = xml.GetAttribute("Date");
break;
}
}
xml.Close();
myFile.Close();
return LastUpdateTime;
}
通过XmlTextReader打开XML文档,读取更新时间从而获取Date对应的值,即服务器端升级文件的最近一次更新时间。
函数调用实现:
以下为引用的内容:
//获取客户端指定路径下的应用程序最近一次更新时间
string thePreUpdateDate = GetTheLastUpdateTime(Application.StartupPath);
Application.StartupPath指客户端应用程序所在的路径。
//获得从服务器端已下载文档的最近一次更新日期
string theLastsUpdateDate = GetTheLastUpdateTime(theFolder.FullName);
theFolder.FullName指在升级文档下载到客户机上的临时文件夹所在的路径。
3.比较日期
客户端应用程序最近一次更新日期与服务器端升级程序的最近一次更新日期进行比较。以下为引用的内容:
//获得已下载文档的最近一次更新日期
string theLastsUpdateDate = GetTheLastUpdateTime(theFolder.FullName);
if(thePreUpdateDate != "")
{
//如果客户端将升级的应用程序的更新日期大于服务器端升级的应用程序的更新日期
if(Convert.ToDateTime(thePreUpdateDate)>=Convert.ToDateTime(theLastsUpdateDate))
{
MessageBox.Show("当前软件已经是最新的,无需更新!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
this.Close();
}
}
this.labDownFile.Text = "下载更新文件";
this.labFileName.Refresh();
this.btnCancel.Enabled = true;
this.progressBar.Position = 0;
this.progressBarTotal.Position = 0;
this.progressBarTotal.Refresh();
this.progressBar.Refresh();
//通过动态数组获取下载文件的列表
ArrayList List = GetDownFileList(GetTheUpdateURL(),theFolder.FullName);
string[] urls = new string[List.Count];
List.CopyTo(urls, 0);
将客户端升级的应用程序的日期与服务器端下载的应用程序日期进行比较,如果前者大于后者,则不更新;如果前者小于后者,则通过动态数组获取下载文件的列表,开始下载文件。
通过BatchDownload()函数来实现。升级程序检测旧的主程序是否活动,若活动则关闭旧的主程序;删除旧的主程序,拷贝临时文件夹中的文件到相应的位置;检查主程序的状态,若状态为活动的,则启动新的主程序。
以下为引用的内容:
private void BatchDownload(object data)
{
this.Invoke(this.activeStateChanger, new object[]{true, false});
try
{
DownloadInstructions instructions = (DownloadInstructions) data;
//批量下载
using(BatchDownloader bDL = new BatchDownloader())
{
bDL.CurrentProgressChanged += new DownloadProgressHandler(this.SingleProgressChanged);
bDL.StateChanged += new DownloadProgressHandler(this.StateChanged);
bDL.FileChanged += new DownloadProgressHandler(bDL_FileChanged);
bDL.TotalProgressChanged += new DownloadProgressHandler(bDL_TotalProgressChanged);
bDL.Download(instructions.URLs, instructions.Destination, (ManualResetEvent) this.cancelEvent);
}
}
catch(Exception ex)
{
ShowErrorMessage(ex); bitsCN_com
}
this.Invoke(this.activeStateChanger, new object[]{false, false});
this.labFileName.Text = "";
//更新程序
if(this._Update)
{
//关闭原有的应用程序
this.labDownFile.Text = "正在关闭程序....";
System.Diagnostics.Process[]proc=System.Diagnostics.Process.GetProcessesByName("TIMS");
//关闭原有应用程序的所有进程
foreach(System.Diagnostics.Process pro in proc)
{
pro.Kill();
}
DirectoryInfo theFolder=new DirectoryInfo(Path.GetTempPath()+”JurassicUpdate");
if(theFolder.Exists)
{
foreach(FileInfo theFile in theFolder.GetFiles())
{
//如果临时文件夹下存在与应用程序所在目录下的文件同名的文件,则删除应用程序目录下的文件
if(File.Exists(Application.StartupPath + \\"+Path.GetFileName(theFile.FullName)))
File.Delete(Application.StartupPath + "\\"+Path.GetFileName(theFile.FullName));
//将临时文件夹的文件移到应用程序所在的目录下
File.Move(theFile.FullName,Application.StartupPath + \\"+Path.GetFileName(theFile.FullName));
}
}
//启动安装程序
this.labDownFile.Text = "正在启动程序....";
System.Diagnostics.Process.Start(Application.StartupPath + "\\" + "TIMS.exe");
this.Close();
}
}
这段程序是实现在线升级的关键代码,步骤有点复杂:首先用Invoke方法同步调用状态改变进程,然后调用动态链接库中批量下载(BatchDownloader.cs)类启动批量下载,接着判断原有的主应用程序有没有关闭,如果没关闭,则用Process.Kill()来关闭主程序。接下来,判断临时文件夹下(即下载升级程序所在的目录)是否存在与应用程序所在目录下的文件同名的文件,如果存在同名文件,则删除应用程序目录下的文件,然后将临时文件夹的文件移到应用程序所在的目录下。最后重新启动主应用程序。这样更新就完成了。
参考资料:http://www.flighty.cn/html/zmyy/csharp_net/20080729/147.html -
微信小程序如何实现点击链接跳转到手机自带浏览器
2019-10-06 16:52:56最近遇到一个需求、公司有一个业务,制作的小程序需要跳出微信打开一个指定的我们自己的页面,拿到这个需求后我们团队分开去找资料研究方案,通过微信的开发文档、腾讯的第三方开发文档我们都查阅过资料但是最终只... -
-
-
-
-
如何制作试用版安装包
2010-09-14 00:32:00版权声明: 可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。...在图标Trialware Files上点击鼠标右键,创建一个试用配置项(见下图)。 首先选择试用文件(一般选择主应用程序)... -
Installshield,如何制作试用版安装包
2010-10-15 14:02:12首先需要在...在图标Trialware Files上点击鼠标右键,创建一个试用配置项(见下图)。 首先选择试用文件(一般选择主应用程序),之后点击Acquire,见下图 ... -
Kevin专栏---如何制作试用版安装包
2010-05-18 09:19:00首先需要在... 在图标Trialware Files上点击鼠标右键,创建一个试用配置项(见下图)。 首先选择试用文件(一般选择主应用程序),之后点击Acquire,见下图 点击Next(见下图),在下图中输入申请到... -
初入安全坑,简单病毒的制作学习分享~
2020-04-09 23:42:35不知道大家有没有这样的一个经历,在QQ上接受了一个QQ好友的文件后点击打开,电脑就开始了自动关机倒计时或蓝屏或无限弹框之类的事件,并且这个程序无论怎么关都关不掉!!!诚然,这就是一个的病毒,你可能被你的... -
Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好
2011-01-28 17:02:08我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。 实现原理: 程序里我们先建立一个主工程,作为主界面,然后再建立一个对 话框类,将其加入工程中,然后在程序中调用自己新建的对话框类... -
【android免root脚本制作】基于控件的操作——auto.js进阶
2019-06-19 23:13:55在【android免root脚本制作】自动坐标操作手机——京东金融程序金果摇钱树自动收金果之后,想要做进一步优化,因为基于坐标点击如何屏幕被移动之类就会点击错位,不同手机还需去适配坐标,甚是麻烦,所以改个改为... -
AnxiousMango:此应用程序可在复杂的芒果世界中帮助所有人缓解焦虑-源码
2021-02-22 05:26:02创建一个新的思想日志 进行多阶段思考记录日志 第1页:日期,标题,描述情况,心情,自动思考 第2页:点击进入自动提示,添加热门提示,证据,反对, 第3页:单击创建平衡思想,显示热门思想,显示情绪,输入... -
论文如何标注参考文献.doc
2021-01-18 11:54:451、如何标注参考文献 光标放在引用参考文献的地方,在菜单栏上选【引用 插入尾注】,点击【选项】按钮修改编号格式为阿拉伯数字,位置为“文档结尾”,确定后word就在光标的地方插入了参考文献的编号,并自动跳到... -
宝元系统u盘使用说明_教你如何使用U盘安装电脑系统
2021-01-01 20:41:031第一步将u盘插入电脑usb接口,程序会自动扫描,我们只需在下拉列表中选择用于制作的u盘,然后点击“一键制作”按钮即可,如下图所示:2第二步在提示框中,点击“确定”按钮,如下图所示:3第三步随后就可以看到制作... -
关于如何更好地传播的建议
2020-12-09 11:07:37<div><p>考虑制作一个看上去很漂亮的Github Badge,然后呼吁大家把它加入到自己的项目中。毕竟一个漂亮好看的Badge,谁不愿意加呢? 当然,点击该Badge会跳转到某链接(比如你们的... -
-
-
-
-