`
rcfalcon
  • 浏览: 228658 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WIN平台下应用程序利用批处理更新自身

阅读更多

今天又碰到需要做一个简单的自动升级的客户端程序,

客户端程序在拿到升级包并且解压之后,怎样自更新并再启动呢?

这里我封装了一个类,利用批处理,将升级文件覆盖掉本地文件,然后重启动应用程序。

 

#ifndef KILL_MYSELF_H_
#define KILL_MYSELF_H_

#include <iostream>
#include <vector>

class UpdateMyself
{
public:
	UpdateMyself()
	{
		m_Files.clear();
	}

	//设置更新目录
	void SetDir( std::string dir )
	{
		m_UpdateDir = dir;
	}

	//增加更新文件
	void AddFile( std::string filename )
	{
		m_Files.push_back( filename );
	}

	//设置启动应用名
	void SetStartApp( std::string appname )
	{
		m_StartApp = appname;
	}

	//执行
	void Execute()
	{
		//建立更新批处理文件
		FILE *fp; 
		fp = fopen( "update.bat" , "w+" ); 
		fprintf( fp , "@echo off\n" ); 
		
		//覆盖本地文件
		for( std::vector<std::string>::iterator iter = m_Files.begin(); iter != m_Files.end(); ++iter )
		{
			std::string filename = *iter;
			fprintf( fp , "del %s\n", filename.c_str() ); 
			fprintf( fp , "copy .\\%s\\%s %s\n", m_UpdateDir.c_str(), filename.c_str(), filename.c_str() ); 
			fprintf( fp , "del .\\%s\\%s\n", m_UpdateDir.c_str(), filename.c_str() ); 
		}

		//自杀
		fprintf( fp , ":begin\n" ); 
		fprintf( fp , "del %s\n", m_StartApp.c_str() ); 
		fprintf( fp , "if exist %s goto begin\n", m_StartApp.c_str() ); 
		fprintf( fp , "copy .\\%s\\%s %s\n", m_UpdateDir.c_str(), m_StartApp.c_str(), m_StartApp.c_str() ); 
		//fprintf( fp , "rd/q %s\n", m_UpdateDir.c_str() );
		fprintf( fp , "del .\\%s\\%s\n", m_UpdateDir.c_str(), m_StartApp.c_str() ); 
		fprintf( fp , "start %s\n", m_StartApp.c_str() );
		fprintf( fp , "del %%0%%\n");
		fclose(fp); 

		WinExec("update.bat",SW_SHOW);
		exit(0);
	}
private:
	std::vector<std::string> m_Files;
	std::string m_UpdateDir;
	std::string m_StartApp;
};

#endif

 

 

假设我们下载之后的更新文件都位于update目录中,我只需要

 

UpdateMyself test;

test.SetDir("update");

test.AddFile(...);  把要更新的文件名加进去

test.SetStartApp(...); 设置更新之后启动的应用程序名称

test.Execute();

 

就可以完成更新了。

分享到:
评论

相关推荐

    win7桌面快捷方式终极批处理最新版

    在Windows 7操作系统中,桌面快捷方式是一种便捷的手段,让用户快速访问常用的应用程序、文件或文件夹。快捷方式本质上是指向目标文件的指针,它们占用的硬盘空间极小,但能极大地提高用户的工作效率。"win7桌面快捷...

    windows批处理命令执行java程序

    本篇文章将详细讲解如何利用批处理命令来运行Java程序,并结合一个名为`testjar`的示例进行说明。 首先,理解批处理命令的基本结构。一个批处理文件通常以`.bat`或`.cmd`为扩展名,由一系列DOS命令组成,每行代表一...

    批处理教材,特别详细

    总结来说,批处理教材提供了一个全面的学习平台,帮助用户掌握批处理文件的创建、编辑和执行,以及如何利用批处理提高命令行操作的效率和自动化程度。通过学习,你可以创建自己的批处理程序来简化日常的计算机任务,...

    windows10时间显示秒数批处理bat文件

    针对这一需求,我们可以利用批处理(Batch Script)这种简单的脚本语言来修改系统设置,使得任务栏时间显示包含秒数。本文将详细解析这个"windows10时间显示秒数批处理bat文件"的工作原理,并介绍如何使用。 批处理...

    自己收集的批处理教程

    同时,批处理的概念也扩展到了其他操作系统和应用程序,如Unix的Shell脚本,甚至某些特定用途的应用程序也采用类似批处理的文本指令文件。 总的来说,批处理是一种简单但实用的自动化工具,尤其对于系统管理员和...

    BAT批处理脚本-系统设置查询修改硬件相关-WIN2003 IIS最小权限分配.bat.zip

    1. **IIS基本结构**:理解IIS的网站、应用程序池、虚拟目录等概念,以及它们之间的关系。 2. **用户账户与权限**:了解NTFS权限和IIS进程身份(如IWAM账户、默认应用程序池身份)的设置,确保服务仅以最低权限运行...

    自动关机程序(适用于win7)

    .NET Framework 3.5是微软为开发者创建Windows应用程序提供的一套全面的开发和运行环境。在Windows 7中,该框架通常是预装的,因此用户可以直接运行此程序。然而,在其他Windows版本上,如Windows 8、10等,可能需要...

    批处理学习

    批处理文件的灵活性在于,除了DOS命令,还可以包含Windows系统中的其他命令、程序调用,甚至可以利用条件语句(如`if`)、流程控制语句(如`goto`)和循环语句(如`for`)来实现一定的逻辑控制。 批处理文件的一个...

    OpenSSL1.1.1g安装包及生成证书批处理

    总结起来,这个压缩包提供了在Windows环境下安装OpenSSL和Perl的步骤,以及利用批处理脚本自动化生成各种证书文件的方法。对于服务器管理员或者开发者来说,这能大大提升证书管理的效率和便利性。

    nwjs-v0.48.3-win-x64

    nwjs-v0.48.3-win-x64是一个基于Chromium和Node.js的开源框架,...通过修改URL和使用批处理文件,开发者可以便捷地定制和打包自己的Web应用程序。对于熟悉Web开发的人员来说,nw.js提供了一条进入桌面应用开发的捷径。

    一次性打开多个程序、窗口、应用

    首先,我们可以利用批处理脚本来实现这一目标。批处理文件(.bat)是一种简单的命令行脚本,允许用户通过编写一系列命令来执行多个任务。例如,你可以在批处理文件中列出要启动的所有程序的路径,然后只需双击该文件...

    windows系统循环自动下载文件 自动下载 自动刷下行 win7 win10系统均可

    4. **多任务并行下载**:为了榨干带宽,你可以在不同的文件夹中启动多个这样的批处理文件,每个文件夹运行一个wget进程,这样就可以同时从多个源下载文件,最大化利用网络带宽。 5. **注意事项**:确保你的网络计划...

    isight-app:Isight优化应用程序

    64位系统因其能够处理更大的内存和更高效的计算能力,通常能够更好地支持复杂的软件运行,因此`RunExample.bat`的设立旨在充分利用这些优势,确保Isight在Win64平台上的流畅运行。 接着,我们来看`RunExample_win32...

    [Windows环境下32位汇编语言程序设计(罗云彬)].win32asm.rar

    - Windows API是开发Windows应用程序的基础,书中可能详细讲解如何调用API函数,如CreateProcess、WriteFile、GetModuleHandle等。 - 如何通过 STDCALL调用约定与C/C++代码进行交互,理解参数压栈规则和返回值处理...

    关闭Win10自动更新.zip

    本教程将详细解释如何利用联想提供的小工具来关闭Win10自动更新。 首先,我们关注的是"关闭Win10自动更新.EXE"这个文件,这很可能是一个联想开发的专用程序,用于帮助用户简单快捷地禁用Win10的自动更新机制。在...

    win7注册表优化

    在Windows 7操作系统中,注册表是存储系统和应用程序配置信息的重要数据库。通过优化注册表,我们可以提升系统性能,改善启动、关闭以及程序运行的速度。以下是对提供的注册表优化文件的详细解读: 1. **开启DWM中...

    Win7系统中定制自己的快速运行程序方式.docx

    在日常使用Windows 7系统的过程中,我们经常需要频繁地打开各种应用程序。对于那些不习惯使用鼠标的用户来说,利用“运行”命令来快速启动程序无疑是一种非常高效的方式。然而,这种方法的一个不足之处在于需要记住...

    Windows 98 批处理命令 巧妙还原系统

    无盘工作站是一种计算机系统,它没有自己的硬盘驱动器,而是通过网络从服务器上启动,并且其操作系统和应用程序也是从服务器上加载的。这种方法在学校和企业培训中心等场景下非常流行,因为易于管理和维护,同时也能...

    informix client sdk 4.10 win x86-64

    在Windows x86-64环境下,开发者需要注意的是,由于64位系统的寻址空间较大,因此可能需要调整应用程序的内存管理策略以充分利用系统资源。同时,由于64位应用程序的编译和调试可能与32位有所不同,开发者需要熟悉...

    Win32exts_for_CEF3-master.zip

    然而,这也意味着开发者需要定期更新CEF3,以确保其应用程序的安全性和兼容性。 总的来说,“Win32exts_for_CEF3-master.zip”是一个用于创建基于CEF3的C++ ActiveX控件的项目,这些控件能够嵌入到Windows应用中,...

Global site tag (gtag.js) - Google Analytics