1.在软件选项里设置“不检测更新、不自动更新”等等……不过这不能完全禁止自动升级,因为有些软件会偷偷升级;
2.删除该软件的自动升级程序,很多破解版软件就是这样。我没试过,不懂会不会有什么影响;
3.用360来禁止。360优化加速扫描一下,如果扫描出来的话,就禁止掉。如果扫不出来的话就用360流量防火墙。你想想,自动升级,那肯定是要联网的吧?你把它禁止访问流量了,那它就不能升级了。很简单,打开360流量防火墙,看到那个升级程序在联网,你就点击禁止访问网络。
祝你使用软件愉快~~
如何让客户端程序 自动更新 版本
用C#实现软件自动更新思路
前言
长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序可维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素。有很多企业用户就是因为这个原因而放弃使用C/S。然而当一个应用必须要使用C/S结构才能很好的实现其功能的时候,我们该如何解决客户端的部署与自动升级问题?部署很简单,只要点击安装程序即可,难的在于每当有新版本发布时,能够实现自动升级[3]。现在好了,我们的目标很简单,我们希望开发一个与具体应用无关的能够复用的自动升级系统。下面我为大家提供了一套可复用的用C#编写的自动升级系统。
2 实现软件的自动升级存在的困难
第一,为了查找远程服务器上的更新,应用程序必须有查询网络的途径,这需要网络编程、简单的应用程序与服务器通讯的协议。
第二是下载。下载看起来不需要考虑联网的问题,但要考虑下载用户请求的文件,以及在没有用户同意时下载大文件。友好的自动更新应用程序将使用剩余的带宽下载更新。这听起来简单,但却是一个技术难题,幸运的是已经有了解决方法。
第三个考虑因素是使用新版应用程序更换原应用程序的过程。这个问题比较有趣,因为它要求代码运行时将自己从系统删除,有多种办法可以实现该功能[5],本文程序主要通过比较新旧版本的日期号来实现替换新版本应用程序的功能。
3 实现软件自动在线升级的原理
写两个程序,一个是主程序;一个是升级程序;所有升级任务都由升级程序完成。
1.启动升级程序,升级程序连接到网站,下载新的主程序(当然还包括支持的库文件、XML配置文档等)到临时文件夹;
2.升级程序获取服务器端XML配置文件中新版本程序的更新日期或版本号或文件大小;
3.升级程序获取原有客户端应用程序的最近一次更新日期或版本号或文件大小,两者进行比较;如果发现升级程序的日期大于原有程序的最新日期,则提示用户是否升级;或者是采用将现有版本与最新版本作比较,发现最新的则提示用户是否升级;也有人用其它属性如文件大小进行比较,发现升级程序的文件大小大于旧版本的程序的大小则提示用户升级。本文主要采用比较新旧版本更新日期号来提示用户升级。
4.如果用户选择升级,则获取下载文件列表,开始进行批量下载文档;
5.升级程序检测旧的主程序是否活动,若活动则关闭旧的主程序;
6.删除旧的主程序,拷贝临时文件夹中的文件到相应的位置;
7.检查主程序的状态,若状态为活动的,则启动新的主程序;
8.关闭升级程序,升级完成[4]。
4 用C#实现在线升级的关键步骤
这里我主要使用日期信息来检测是否需要下载升级版本。
4.1 准备一个XML配置文件
名称为AutoUpdater.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版本号
//升级文件所在服务器端的网址
//升级文件的更新日期
//升级文件的版本号
//升级文件列表
//共有三个文件需升级
//允许重新启动应用程序
//启动的应用程序名
从以上XML文档中可以得知升级文档所在服务器端的地址、升级文档的更新日期、需要升级的文件列表,其中共有三个文件需升级:aa.txt、VB40.rar、VB4-1.CAB。以及是否允许重新启动应用程序和重新启动的应用程序名。
4.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指在升级文档下载到客户机上的临时文件夹所在的路径。
4.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);
将客户端升级的应用程序的日期与服务器端下载的应用程序日期进行比较,如果前者大于后者,则不更新;如果前者小于后者,则通过动态数组获取下载文件的列表,开始下载文件。
4.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指在升级文档下载到客户机上的临时文件夹所在的路径。
4.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);
}
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();
}
}
怎么取消手机软件在wifi自动更新下
取消手机软件在WIFI下自动更新可以参考以下方法:(我使用的是小米手机,下面介绍以小米手机为例,其他手机设置类似,只是功能键位置有区别)
方法一:手动设置
1、首先打开小米手机系统自带的应用商店软件,一般都放置在了其他应用这个文件夹里面。具体如下图所示:
2、打开应用商店以后,点击小米手机的菜单键(即手机左下方有三条白线的那个键),然后点击设置。具体如下图:
3、然后,在设置的菜单下面将自动升级功能按钮关闭,以保证软件不能使用wifi自动升级。
具体如下图所示:
4、关闭以后,手机软件就不会自动升级了。如果手机软件仍然自动升级,那么有可能是手机软件自身设置的问题。或者是由于手机里面安装的手机助手等等应用客户端的原因导致的。大家可以从这两个方面找找原因,然后设法关闭。
方法二:下载手机助手(例如360、豌豆荚助手都有该功能),通过手机助手优化该功能设置。
C#如何实现软件的自动更新
很简单建立splash启动入口文件。
Splash每次启动时检查当前版本号是否与源版本号相同。如果相同则启动主程序不必更新。如果不同,对比文件版本号,或下载更新包进行覆盖即可。
一般情况下这种情况足以使用,不必对splash进行更新。大多数的处理方案是如果涉及到对splash更新时,要求客户手工更新或生新安装新的版本即可。
换句话来说,把splash看作是主程序的引导启动,它的功能除了引导主程序启动还会检查主程序是否需要更新。当然,如果实现全自动自更新时,可以考虑在应用程序文件夹中建立一个update文件夹。让splash启动后启动其中的批处理文件,批处理文件会干掉slpash进程,然后覆盖掉splash文件(主程序也可以这么干,但是有一定的危险性)。
我当时做过一个自动更新的应用程序(收银机自更),每天软件启动时调用的就是splash检查软件版本号。但我们使用的单一维护的方式,并不是让你下载更新包(软件统一更新,不涉及分支版本,所以统一维护即可),发现更新后,再对比所有文件版本号(与软件版本号不同),下载所有不同的软件版本下进行覆盖,覆盖完成后由splash启动主程序。
但是——我只是说但是,计划永远跟不上变化,领导要求必须会自更新splash!其实产生的原因很简单,当我们并没有计划将splash放到维护源,结果一个哥们在测试在将splash放到维护源被下载到了客户机,但确定无法覆盖正在运行的splash而导致更新失败(文档中注明了不需要将splash放到维护源的,测试人员闲的淡痛,非要试一下,然后将错误直接上报,虽然解析了原因,但领导要求一定要会更新splash自己,当然理由也非常充分——如果你的splash存在bug呢)!在这种情况下,我们使用了.bat文件,将splash运行时先检查update文件中的内容,如果有bat文件,则运行bat文件,由bat文件处理update中其他文件的拷贝。批处理就干了一件事——干掉正在运行splash,从update文件中将其拷贝出来,然后再运行splash。而且这个批处理文件的来源于维护源!也可以写复杂的bat文件进行其他一些相关的处理。update在应用程序文件夹内,所以只需要做相对路径。反正永远会存在一定的问题——你怕的是splash被无意上传到维护源,而bat文件编写错误时更有问题,而且而且而且,你不觉得这玩意是一个后门吗?测试人员只管的是测试,他们不会考虑到这个安全性的——反正没人说,如果哪天维护源被别有用心的人拿到,写了那个一个bat文件,唉呀——后果我们都不可想想!
手机里的应用程序一直自动更新 怎么办
这种情况应该是手机软件管家一类的软件设置了自动更新功能,将之取消即可。
手机软件就是可以在安装在手机上的软件,完善原始系统的不足与个性化。随着科技的发展,现在手机的功能也越来越多,越来越强大。不是像过去的那么简单死板,目前发展到了可以和掌电脑相媲美。手机软件与电脑一样,下载手机软件时还要考虑购买这一款手机所安装的系统来决定要下相对应的软件。目前手机主流系统有以下:Symbian、Linux、Research in Motion、Windows Mobile.但是在2007年,苹果推出了运行自己软件的iPhone;Google宣布推出Android手机操作系统平台。
手机里的软件老是自动更新怎么办
嗨! 您好,您可以尝试这样,打开应用商店,然后点击菜单键——设置,在设置中将自动升级的开关关掉就好了 祝你愉快,满意请采纳哦
安卓手机上的应用程序总是自动更新,如何阻止?
手机设置软件自动更新,可以通过三星应用商店或者第三方市场软件进行相应的设置实现,例如三星应用商店-菜单键-设置-自动更新应用程序-仅通过WLAN/任何可用时间(可能会产生数据费用)
防止软件自动更新
有些软件的自动更新无法禁止,比如搜狗拼音和wps,即使在设置里禁止也同样会运行,这时可通过修改注册表来禁止。
1、开始→运行,输入gpedit.msc打开组策略,定位到计算机配置——Windows设置——安全设置——软件限制策略——其他规则(注:如没有,请右键选中软件限制策略从中新建),在右边空白右键新建新散列规则,跟着浏览找到要限制运行的程序确定即可。这是对文件的散列规则作的限制,文件改名,转移路径也不能运行。
2、组策略定位到用户配置——管理模板——系统,在右边找到“不要运行指定的Windows程序”双击打开属性,选择启用,点击显示,把要限制运行的应用程序的文件名添加进来即可。此方法惟一不足的就是文件改名后不能限制。
软件的话我知道mcafee可以办到,但是它很大是个杀毒软件
转载请注明出处51数据库 » 程序自动升级软件 禁止软件自动升级的方法