精华内容
下载资源
问答
  • 思路1:主程序打开后,先访问服务器上的版本数据接口,检查本地版本是否为最新,如果不是,则打开更新程序,关闭主程序,更新程序下载最新的主程序EXE,替换之前的EXE文件,替换完之后再打开主程序,关闭更新程序。...

    解决思路:

    思路1:主程序打开后,先访问服务器上的版本数据接口,检查本地版本是否为最新,如果不是,则打开更新程序,关闭主程序,更新程序下载最新的主程序EXE,替换之前的EXE文件,替换完之后再打开主程序,关闭更新程序。

    思路2:以更新程序为打开入口,先打开更新程序,访问服务器上的版本数据接口,检查本地版本是否为最新,如果不是,则下载最新的主程序EXE,替换之前的主程序EXE文件,替换完之后再打开主程序,关闭更新程序。

    注意:本地版本信息放在Config文件中

    上代码-思路2-客户端

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Configuration;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Windows.Forms;
    
    namespace UpdateProgram
    {
        public partial class Form1 : Form
        {
            string UpdateUrl = "http://更新网址/" + "ATAPI/UpdateExe";//检测版本更新地址
            string ExeUrl = "http://更新网址/update/exe/";//下载EXE的地址
            string ExeName = "Index";//程序名
            public Form1()
            {
                InitializeComponent();
                
            }
            public void Updatenow()
            {
                try
                {
                    Configuration config = ConfigurationManager.OpenExeConfiguration(@"" + ExeName + ".exe"); // 写的是应用程序的路径
                }
                catch
                {
                    MessageBox.Show("当前目录找不到主程序" + ExeName);
                    Close();
                    return;
                }
                string retdata = HttpGet(UpdateUrl);
                lg_updateBean updateBean = CYQ.Data.Tool.JsonHelper.ToEntity<lg_updateBean>(retdata);
                int versionid = 0;//当前的版本ID
                string versionname = string.Empty;
                int.TryParse(LoadConfig("VersionID"), out versionid);
                versionname = LoadConfig("VersionName");//当前的版本号
                if (versionid < updateBean.ID)//需要更新
                {
                    DialogResult dr = MessageBox.Show("检测到新版本:" + updateBean.Version + "更新内容:" + updateBean.Remarks + ",当前版本:" + versionname + ",是否更新", "操作提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (DialogResult.Yes == dr)
                    {
                        try
                        {
                            System.Net.WebClient client = new System.Net.WebClient();
                            byte[] data = client.DownloadData(ExeUrl + updateBean.ID + "/" + ExeName + ".exe");//下载EXE程序
    
                            System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();//把之前的程序关闭
                            foreach (System.Diagnostics.Process p in ps)
                            {
                                //MessageBox.Show(p.ProcessName);
                                if (p.ProcessName == ExeName || p.ProcessName == (ExeName + ".vshost"))
                                {
                                    p.Kill();
                                    break;
                                }
                            }
    
                            string path = Application.StartupPath;
                            FileStream fs = new FileStream(path + "\\" + ExeName + ".exe", FileMode.Create);
                            //将byte数组写入文件中
                            fs.Write(data, 0, data.Length);
                            fs.Close();
                            MessageBox.Show("更新成功");
    
                            SaveConfig("VersionID", updateBean.ID.ToString());
                            SaveConfig("VersionName", updateBean.Version);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("更新失败:" + ex.Message);
                        }
                    }
                }
                Close();
                System.Diagnostics.Process.Start(Application.StartupPath + "\\" + ExeName + ".exe");
    
            }
            public string LoadConfig(string content)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(@"" + ExeName + ".exe"); // 写的是应用程序的路径
                try
                {
                    return config.AppSettings.Settings[content].Value;
                }
                catch
                {
                    return "";
                }
    
            }
            public void SaveConfig(string content, string value)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(@"" + ExeName + ".exe"); // 写的是应用程序的路径
                try
                {
                    config.AppSettings.Settings[content].Value = value;
                }
                catch
                {
                    config.AppSettings.Settings.Add(content, value);
                }
                config.Save(System.Configuration.ConfigurationSaveMode.Minimal);
            }
            public static string HttpGet(string url)
            {
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
                request.Method = "GET";
                //request.ContentType = "application/x-www-form-urlencoded";
                request.Accept = "*/*";
                request.Timeout = 15000;
                request.AllowAutoRedirect = false;
                WebResponse response = null;
                string responseStr = null;
                try
                {
                    response = request.GetResponse();
                    if (response != null)
                    {
                        StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                        responseStr = reader.ReadToEnd();
                        reader.Close();
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("请检查当前网络或者链接路径");
                }
                finally
                {
                    request = null;
                    response = null;
                }
                return responseStr;
            }
            public partial class lg_updateBean
            {
                public int ID { get; set; }
                public string Version { get; set; }
                public string Remarks { get; set; }
    
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                Updatenow();
            }
        }
    }
    

    服务端

    public ActionResult UpdateExe()
    {
        string companyname = WebHelper.Query<string>("name");
        using (MAction action = new MAction("ExeUpdate"))
        {
            string retdata = action.Select("id=(select Max(id) from ExeUpdate where CompanyName='" + companyname + "')").ToJson();
            return Content(retdata);
        }
    }

     

    展开全文
  • 为了让大家及时接收FastAdmin的最新版更新,我们在后台管理部分加入了一个版本检测功能,从1.0.0.20180118_beta这个版本起,自动检测更新的功能已经默认关闭,如果需要开启,可以修改application/config.php中的...
    为了让大家及时接收到FastAdmin的最新版更新,我们在后台管理部分加入了一个版本检测功能,从1.0.0.20180118_beta这个版本起,自动检测更新的功能已经默认关闭,如果需要开启,可以修改application/config.php中的fastadmin中checkupdate的值为true即可。


    请注意:如果你使用的FastAdmin的版本低于1.0.0.20180118_beta,则自动检测更新功能是默认开启的。如果你需要关闭或删除此功能,请修改public/assets/js/backend/index.js中的代码,将以下的代码注释或移除即可。

    //读取版本检测信息

    var ignoreversion = localStorage.getItem("ignoreversion");
    
    if (Config.fastadmin.checkupdate && ignoreversion !== "*") {
    
     checkupdate(ignoreversion, false);
    
    }
    原文链接


    展开全文
  • android检测新版本并下载安装的方法

    千次阅读 2012-10-22 14:26:12
    很多客户端程序都有检测是否有更新的功能,本文大体介绍了其实现过程。此功能模块也是开源中国客户端中的源码,个人感觉用到的安卓基础知识还是比较全面的,很适合初学者学习进阶。 /** * 检查App更新 * @...

    很多客户端程序都有检测是否有更新的功能,本文大体介绍了其实现过程。此功能模块也是开源中国客户端中的源码,个人感觉用到的安卓基础知识还是比较全面的,很适合初学者学习进阶。

    	/**
    	 * 检查App更新
    	 * @param context
    	 * @param isShowMsg 是否显示提示消息
    	 */
    	public void checkAppUpdate(Context context, final boolean isShowMsg){
    		this.mContext = context;
    		getCurrentVersion();
    		if(isShowMsg){
    			if(mProDialog == null)
    				mProDialog = ProgressDialog.show(mContext, null, "正在检测,请稍侯...", true, true);
    			else if(mProDialog.isShowing() || (latestOrFailDialog!=null && latestOrFailDialog.isShowing()))
    				return;
    		}
    		final Handler handler = new Handler(){
    			public void handleMessage(Message msg) {
    				//进度条对话框不显示 - 检测结果也不显示
    				if(mProDialog != null && !mProDialog.isShowing()){
    					return;
    				}
    				//关闭并释放进度条对话框
    				if(isShowMsg && mProDialog != null){
    					mProDialog.dismiss();
    					mProDialog = null;
    				}
    				//显示检测结果
    				if(msg.what == 1){
    					mUpdate = (Update)msg.obj;
    					if(mUpdate != null){
    						if(curVersionCode < mUpdate.getVersionCode()){
    							apkUrl = mUpdate.getDownloadUrl();
    							updateMsg = mUpdate.getUpdateLog();
    							showNoticeDialog();
    						}else if(isShowMsg){
    							showLatestOrFailDialog(DIALOG_TYPE_LATEST);
    						}
    					}
    				}else if(isShowMsg){
    					showLatestOrFailDialog(DIALOG_TYPE_FAIL);
    				}
    			}
    		};
    		new Thread(){
    			public void run() {
    				Message msg = new Message();
    				try {					
    					Update update = ApiClient.checkVersion((AppContext)mContext.getApplicationContext());
    					msg.what = 1;
    					msg.obj = update;
    				} catch (AppException e) {
    					e.printStackTrace();
    				}
    				handler.sendMessage(msg);
    			}			
    		}.start();		
    	}	
    	

    这是入口方法,布尔类型的isShowMsg 表示是否显示“正在检测”这样一个对话框,一般在程序刚进入进行初始化时不需要显示提示,在后台默认进行。在设置中进行手动更新检测时为了良好的用户体验一般设置提示对话框可见。

    	/**
    	 * 获取当前客户端版本信息
    	 */
    	private void getCurrentVersion(){
            try { 
            	PackageInfo info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
            	curVersionName = info.versionName;
            	curVersionCode = info.versionCode;
            } catch (NameNotFoundException e) {    
    			e.printStackTrace(System.err);
    		} 
    	}

    用于稍后和最新版本进行对比,决定是否需要更新。

    	/**
    	 * 显示'已经是最新'或者'无法获取版本信息'对话框
    	 */
    	private void showLatestOrFailDialog(int dialogType) {
    		if (latestOrFailDialog != null) {
    			//关闭并释放之前的对话框
    			latestOrFailDialog.dismiss();
    			latestOrFailDialog = null;
    		}
    		AlertDialog.Builder builder = new Builder(mContext);
    		builder.setTitle("系统提示");
    		if (dialogType == DIALOG_TYPE_LATEST) {
    			builder.setMessage("您当前已经是最新版本");
    		} else if (dialogType == DIALOG_TYPE_FAIL) {
    			builder.setMessage("无法获取版本更新信息");
    		}
    		builder.setPositiveButton("确定", null);
    		latestOrFailDialog = builder.create();
    		latestOrFailDialog.show();
    	}
    
    	/**
    	 * 显示版本更新通知对话框
    	 */
    	private void showNoticeDialog(){
    		AlertDialog.Builder builder = new Builder(mContext);
    		builder.setTitle("软件版本更新");
    		builder.setMessage(updateMsg);
    		builder.setPositiveButton("立即更新", new OnClickListener() {			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				dialog.dismiss();
    				showDownloadDialog();			
    			}
    		});
    		builder.setNegativeButton("以后再说", new OnClickListener() {			
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				dialog.dismiss();				
    			}
    		});
    		noticeDialog = builder.create();
    		noticeDialog.show();
    	}
    	/**
    	 * 显示下载对话框
    	 */
    	private void showDownloadDialog(){
    		AlertDialog.Builder builder = new Builder(mContext);
    		builder.setTitle("正在下载新版本");
    		
    		final LayoutInflater inflater = LayoutInflater.from(mContext);
    		View v = inflater.inflate(R.layout.update_progress, null);
    		mProgress = (ProgressBar)v.findViewById(R.id.update_progress);
    		mProgressText = (TextView) v.findViewById(R.id.update_progress_text);
    		
    		builder.setView(v);
    		builder.setNegativeButton("取消", new OnClickListener() {	
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				dialog.dismiss();
    				interceptFlag = true;
    			}
    		});
    		builder.setOnCancelListener(new OnCancelListener() {
    			@Override
    			public void onCancel(DialogInterface dialog) {
    				dialog.dismiss();
    				interceptFlag = true;
    			}
    		});
    		downloadDialog = builder.create();
    		downloadDialog.setCanceledOnTouchOutside(false);
    		downloadDialog.show();
    		
    		downloadApk();
    	}

    以上是更新过程中需要用到的几种对话框。

    	private Runnable mdownApkRunnable = new Runnable() {	
    		@Override
    		public void run() {
    			try {
    				String apkName = "OSChinaApp_"+mUpdate.getVersionName()+".apk";
    				String tmpApk = "OSChinaApp_"+mUpdate.getVersionName()+".tmp";
    				//判断是否挂载了SD卡
    				String storageState = Environment.getExternalStorageState();		
    				if(storageState.equals(Environment.MEDIA_MOUNTED)){
    					savePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/OSChina/Update/";
    					File file = new File(savePath);
    					if(!file.exists()){
    						file.mkdirs();
    					}
    					apkFilePath = savePath + apkName;
    					tmpFilePath = savePath + tmpApk;
    				}
    				
    				//没有挂载SD卡,无法下载文件
    				if(apkFilePath == null || apkFilePath == ""){
    					mHandler.sendEmptyMessage(DOWN_NOSDCARD);
    					return;
    				}
    				
    				File ApkFile = new File(apkFilePath);
    				
    				//是否已下载更新文件
    				if(ApkFile.exists()){
    					downloadDialog.dismiss();
    					installApk();
    					return;
    				}
    				
    				//输出临时下载文件
    				File tmpFile = new File(tmpFilePath);
    				FileOutputStream fos = new FileOutputStream(tmpFile);
    				
    				URL url = new URL(apkUrl);
    				HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    				conn.connect();
    				int length = conn.getContentLength();
    				InputStream is = conn.getInputStream();
    				
    				//显示文件大小格式:2个小数点显示
    		    	DecimalFormat df = new DecimalFormat("0.00");
    		    	//进度条下面显示的总文件大小
    		    	apkFileSize = df.format((float) length / 1024 / 1024) + "MB";
    				
    				int count = 0;
    				byte buf[] = new byte[1024];
    				
    				do{   		   		
    		    		int numread = is.read(buf);
    		    		count += numread;
    		    		//进度条下面显示的当前下载文件大小
    		    		tmpFileSize = df.format((float) count / 1024 / 1024) + "MB";
    		    		//当前进度值
    		    	    progress =(int)(((float)count / length) * 100);
    		    	    //更新进度
    		    	    mHandler.sendEmptyMessage(DOWN_UPDATE);
    		    		if(numread <= 0){	
    		    			//下载完成 - 将临时下载文件转成APK文件
    						if(tmpFile.renameTo(ApkFile)){
    							//通知安装
    							mHandler.sendEmptyMessage(DOWN_OVER);
    						}
    		    			break;
    		    		}
    		    		fos.write(buf,0,numread);
    		    	}while(!interceptFlag);//点击取消就停止下载
    				
    				fos.close();
    				is.close();
    			} catch (MalformedURLException e) {
    				e.printStackTrace();
    			} catch(IOException e){
    				e.printStackTrace();
    			}
    			
    		}
    	};
    	
    	/**
    	* 下载apk
    	* @param url
    	*/	
    	private void downloadApk(){
    		downLoadThread = new Thread(mdownApkRunnable);
    		downLoadThread.start();
    	}
        private Handler mHandler = new Handler(){
        	public void handleMessage(Message msg) {
        		switch (msg.what) {
    			case DOWN_UPDATE:
    				mProgress.setProgress(progress);
    				mProgressText.setText(tmpFileSize + "/" + apkFileSize);
    				break;
    			case DOWN_OVER:
    				downloadDialog.dismiss();
    				installApk();
    				break;
    			case DOWN_NOSDCARD:
    				downloadDialog.dismiss();
    				Toast.makeText(mContext, "无法下载安装文件,请检查SD卡是否挂载", 3000).show();
    				break;
    			}
        	};
        };

    新开启线程进行最新APK文件的下载和过程中对UI的更新。先将文件下载到后缀.tmp的文件中,下载完成后将后缀改为.apk。过程中更新进度条进度和文字提示。

    	/**
        * 安装apk
        * @param url
        */
    	private void installApk(){
    		File apkfile = new File(apkFilePath);
            if (!apkfile.exists()) {
                return;
            }    
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive"); 
            mContext.startActivity(i);
    	}
    下载完成后或最新apk已经存在时对文件进行安装,完成整个更新过程。

    用到的全局变量如下

    	private static final int DOWN_NOSDCARD = 0;
        private static final int DOWN_UPDATE = 1;
        private static final int DOWN_OVER = 2;
    	
        private static final int DIALOG_TYPE_LATEST = 0;
        private static final int DIALOG_TYPE_FAIL   = 1;
        
    	private static UpdateManager updateManager;
    	
    	private Context mContext;
    	//通知对话框
    	private Dialog noticeDialog;
    	//下载对话框
    	private Dialog downloadDialog;
    	//'已经是最新' 或者 '无法获取最新版本' 的对话框
    	private Dialog latestOrFailDialog;
        //进度条
        private ProgressBar mProgress;
        //显示下载数值
        private TextView mProgressText;
        //查询动画
        private ProgressDialog mProDialog;
        //进度值
        private int progress;
        //下载线程
        private Thread downLoadThread;
        //终止标记
        private boolean interceptFlag;
    	//提示语
    	private String updateMsg = "";
    	//返回的安装包url
    	private String apkUrl = "";
    	//下载包保存路径
        private String savePath = "";
    	//apk保存完整路径
    	private String apkFilePath = "";
    	//临时下载文件路径
    	private String tmpFilePath = "";
    	//下载文件大小
    	private String apkFileSize;
    	//已下载文件大小
    	private String tmpFileSize;
    	
    	private String curVersionName = "";
    	private int curVersionCode;
    	private Update mUpdate;
    Update对象类中包含了url、版本号、版本名等更新必需的信息。

    另外需要在配置文件中声明读写权限

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>





    展开全文
  • iOS版本检测代码(更新版本

    千次阅读 2015-02-24 23:37:29
    在根据你的程序的版本也就是这个的第二个版本号,因为第二个是你的发布版本,上传App的时候主要检测的是这个,它们俩进行对比之后,进行判断,如果结果一样就发个弹窗说是最新版本,如果不是就连接你的App的下载...
    想要检测App的最新版本,首先你得知道当前App在AppStore中的版本是什么,在根据你的程序的版本也就是这个的第二个版本号,因为第二个是你的发布版本,上传App的时候主要检测的是这个,它们俩进行对比之后,进行判断,如果结果一样就发个弹窗说是最新版本,如果不是就连接到你的App的下载地址来更新应用。这个应用的下载地址可以再iTunes中获取如下图
    

    这样就获取的你的App的地址了。
    下面发代码,这个代码用到GCD多线程,因为直接写的话是主线程会发生卡顿的,因为有网络请求

    dispatch_queue_t mainQueue =dispatch_get_main_queue();

               dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

               NSDictionary *infoDic = [[NSBundlemainBundle] infoDictionary];

               NSString *currentVersion = [infoDic objectForKey:@"CFBundleVersion"];

               dispatch_async(globalQueue, ^{

                    

                    NSString *URL =@"http://itunes.apple.com/lookup?id=你自己的AppID";

                    NSMutableURLRequest *request = [[NSMutableURLRequestalloc] init];

                    [requestsetURL:[NSURLURLWithString:URL]];

                    [requestsetHTTPMethod:@"POST"];

                   NSHTTPURLResponse *urlResponse = nil;

                   NSError *error = nil;

                   NSData *recervedData = [NSURLConnectionsendSynchronousRequest:request returningResponse:&urlResponse error:&error];

                    

                    

                    NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:recervedData options:NSJSONReadingMutableContainerserror:&error];

                   NSArray *infoArray = [dic objectForKey:@"results"];

                   NSLog(@"%@", infoArray);

                   if ([infoArray count]) {

                       NSDictionary *releaseInfo = [infoArray objectAtIndex:0];

                       NSString *lastVersion = [releaseInfo objectForKey:@"version"];

                        

                       if (![lastVersion isEqualToString:currentVersion]) {

                           dispatch_async(mainQueue, ^{

                                

                                UIAlertView *alert = [[UIAlertViewalloc] initWithTitle:@"更新"message:@"有新的版本更新,是否前往更新?"delegate:selfcancelButtonTitle:@"关闭"otherButtonTitles:@"更新",nil];

                                alert.tag =10000;

                                [alertshow];

                            });

                        }

                       else

                        {

                           dispatch_async(mainQueue, ^{

                                

                                UIAlertView *alert = [[UIAlertViewalloc] initWithTitle:@"更新"message:@"此版本为最新版本"delegate:selfcancelButtonTitle:@"确定"otherButtonTitles:nil,nil];

                                alert.tag =10001;

                                [alertshow];

                            });

                        }

                    }

                });

                

            }



    这个代码是连接更新的地址

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

    {

       if (alertView.tag==10000) {

           if (buttonIndex==1) {

                NSURL *url = [NSURLURLWithString:@"https://itunes.apple.com/cn/app/ji-xun-xin-wen/id962735629?mt=8"];(这里填写的是你自己的App的连接)

                [[UIApplicationsharedApplication]openURL:url];

            }

        }

    }


    好了,分享完毕,谢谢大家!
    小弟初学OC,不对的地方请大家指出,在此感谢!



    展开全文
  • filezilla关闭更新检测

    千次阅读 2018-11-28 10:50:07
    打开filezilla,在“帮助”-&gt;"关于" 里面找到-&gt;设置文件目录 然后退出filezilla程序,不然下面的修改可能无效 ...中的 X设置为0或者很大的值,其意义是设置多久检测一次更新。 将...
  • Android 版本检测更新

    万次阅读 2016-06-30 15:53:05
    Android版本检测更新是每个应用升级所不可少的,以前早就做过一些,一直没有时间与大家分享,现在就跟大家来分享一下我做的版本检测更新吧。先上图 点击更新之后的 可能有人会问为啥点击更新提示框不消失啊,...
  • iOS 检测版本更新

    万次阅读 2013-07-19 16:52:35
    如果我们要检测app版本的更新,那么我们必须获取当前运行app版本版本信息和appstore 上发布的最新版本的信息。 当前运行版本信息可以通过info.plist文件中的bundle version中获取: [cpp] ...
  • python安装以及版本检测

    千次阅读 2019-07-12 20:32:00
    目前Python有两个大版本,分别是 2.X 和 3.X ,我们的教程基于最新版本 3.6.1 首先我们需要获取Python的安装包,可以从官网获取,如果你因为没有VPN工具而无法访问官网的话,我已经将它放在网盘了,永久有效。...
  • js检测浏览器版本

    千次阅读 2009-08-24 21:47:00
    以下浏览器版本的判断方法来自《JavaScript 高级程序设计》第八章。跟原书中的代码没有任何出入,唯一不同的是加入了对Google Chrome浏览器的判断。 该篇内容主要是为了实现调用window.close()关闭窗口时IE不提示
  • 关闭sublime text3的自动检测更新

    千次阅读 2020-04-11 13:19:45
    今天,弄了好久关于sublime快捷键的事情,出现了关于pyv8的问题,为了省方便,就去官网下了最新版本的,安装下来,就一直提示我,要更新,下载最新版本的!!,网上找了很多方法,基本上都一样,总得来说就是: 点击菜单栏...
  • Android版本更新知识(检测、升级)总结

    万次阅读 多人点赞 2017-03-14 16:19:39
    Android版本更新知识(检测、升级)总结 本文对Android版本更新的知识做全面的总结,主要包括开发中版本的设置,如何检测本程序的版本,版本的更新判断和显示,新版本程序的安装。一.版本的基础知识 版本控制的...
  • android APP检测版本更新以及后台服务更新
  • 目录 1.Jetson Nano简介 2. Jetson Nano环境配置 2.1 开箱配件介绍 2.2 烧录系统 2.3 开机和基本设置 2.4 开发环境配置 2.4.1 更新源和软件 2.4.2 关屏时间设置 ...3.1 人脸检测 3.1.1 安装pip 3.1.2...
  • CDR作为成名杰作,Corel公司对于它的盗版打击力度无疑也是非常的大,...这种方法大家都称为再次安装法:将CDR官方检测盗版直接卸载,然后下载最新版Cdr安装包,旧的版本会自动驱动新版本,前提是一定要下载最新版本。 本
  • 在安装MathType的时候(现在最新版本是6.6a),会提示说MathType与当前的ms office的版本不兼容,从而在office中也无法编辑公式了。其实不然,这只不过是MathType不知道自己是否与office兼容而已,要在office中继续...
  • MySQL 8.0 特性之死锁检测控制

    千次阅读 2019-01-22 10:37:46
    在 MySQL 8.0 中,增加了一个的动态变量:innodb_deadlock_detect,可以用于控制 InnoDB 是否执行死锁检测。该参数的默认值为 ON,即打开死锁检测。 对于高并发的系统,当大量线程等待同一个锁时,死锁检测可能会...
  • 新版本PyCharm Debug mode off解决方案

    千次阅读 2018-11-10 21:38:50
    新版的PyCharm在执行时会出现一些问题...后将复制来的文件路径粘贴 Script path 中,并修改上面的 Name 为 app.py ,点击 ok 保存: 此时运行这里变成 Python 来执行: 右键也变为: 执行文件:
  • IntelliJ IDEA 2020.1 的第二个早期访问版本已发布,的 EAP 构建对调试器和事件探查器(Profiler)进行了改进,并引入了的提交工具窗口(Commit too...
  • "-r 1"关闭矿工并在矿工目录中执行"reboot.bat"文件(Linux版本为"reboot.bash"或"reboot.sh")(如果存在),如果某些GPU失败。 因此,您可以创建"reboot.bat"文件并执行一些操作,例如,如果将此行放在那里:...
  • 第一步:定义观察者 public interface CheckVersionObserver { /** * 在MainActivity里面检测版本更新成功 * @param mainEntity */ public void onCheckNewVerSuccInMain... * 检测新版本失败 * @pa
  • 但是弊端也不可忽视,就是升级麻烦,不可能每写一个版本就要拿着安装包给每个人去替换,这样不仅搞得自己很累,对于使用者来说也会厌烦,所以对于版本自动升级就显得必不可少,好,废话此为止,下面直接上硬货 ...
  • eclipse最新版本Eclipse Neon

    万次阅读 2016-07-01 08:34:14
    这个版本首次鼓励用户使用Eclipse Installer来做安装,这是一种由Eclipse Oomph提供的技术,它通过提供一个很小的安装器来使得各种工具可以按需下载和安装。以前的版本都是提供一个大ZIP安装包,因而Eclipse的下载...
  • 关闭 阻止 禁止 CBox 强制升级
  • 里面网友的方法,亲试...电脑右下角会提示说,此版本不支持在windows上面使用,请更新检查版本。。 如上面连接中网友已经叙述了原因和解决方法。 方法一: 卸载更新的补丁插件(此方法还需要在程序里面禁止下...
  • kafka最初的客户端使用scala写的, 但是有很多限制. 在0.8.1版本中, 用Java重写了producer客户端, 0.9版本中用... 主要介绍了新版本的客户端与旧客户端的区别, 新版本的使用, 详细介绍了一些重要配置, 消费语义等方面.
  • 如果我们要检测app版本的更新,那么我们必须获取当前运行app版本版本信息和appstore 上发布的最新版本的信息。 当前运行版本信息可以通过info.plist文件中的bundle version中获取: NSDictionary *infoDic = [...
  • Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度! 算下来,TomCat服务器已经写了很长一段时间了,一直说拿他来搞点事情,也一直没做,今天刚好有空,交流群还有人请教,就寻思着把一些...
  • 在Python的官网 www.python.org 中找到最新版本的Python安装包,点击进行下载,请注意,当你的电脑是32位的机器,请选择32位的安装包,如果是64位的,请选择64位的安装包; 安装 双击下载好的安装包,弹出如下界面...
  • ESET NOD32如何关闭操作系统没有更新最新的提示?2009-08-18 15:44ESET NOD32 关闭操作系统没有更新最新提示的方法如下(这里以 ESET Smart Security (ESS)4.0 为例来讲解): 打开 ESET Smart Security (ESS...
  • 一、问题描述 从昨天晚上开始,我安装的Android Studio ...就从官网重新下载了一个 **3.3.2 for Windows 64-bit (948 MB)**版本,如下所示: 下载好后,因为我怀疑是原来的配置文件哪里处理错误,所以安装的时候,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 173,075
精华内容 69,230
关键字:

关闭检测到新版本