`

关于cab包卸载时将所有文件删除的方法

阅读更多

做wince或是mobile开发,最终的文件会打包成一个cab包,当别人卸载我们的软件然后进行重装后,我们是希望最好连程序生成的配置文件也一并删除,否则重新安装的话会使用到以前的配置文件,有时这是我们不愿看到并且必须要处理的。

本文介绍的方法是如何利用系统本身的机制,通过一个动态库setup.dll以实现在卸载时删除安装目录中所有文件的功能。

首先需要生成一个setup.dll,此动态库中应包含这样的函数

codeUNINSTALL_INIT
Uninstall_Init(
HWND hwndParent,
LPCTSTR pszInstallDir
)

用以在卸载时进行文件删除的工作。

另外还有一个函数,也是在卸载之后可调用的,但由于参数中并没有带上路径,因此暂时未用,函数原型如下:

codeUNINSTALL_EXIT
Uninstall_Exit(
HWND hwndParent
)

好,首先需要实现一个DeleteDir的函数,然后用Uninstall_Init调用DeleteDir即可。

代码如下:

BOOL DeleteDir(TCHAR * path)
{
	WIN32_FIND_DATA finddata;
	HANDLE hfind;
	TCHAR * pdir;

	pdir=new TCHAR[_tcslen(path)+5];
	_tcscpy(pdir,path);
	if(path[_tcslen(path)-1] != TCHAR('\\'))
		_tcscat(pdir, _T("\\*.*"));
	else
		_tcscat(pdir, _T("*.*"));

	hfind=FindFirstFile(pdir,&finddata);
	if(hfind==INVALID_HANDLE_VALUE)
		return FALSE;

	delete []pdir;
	do
	{
		pdir=new TCHAR[_tcslen(path)+_tcslen(finddata.cFileName)+2];
		_stprintf(pdir,_T("%s\\%s"),path,finddata.cFileName);
		if(_tcscmp(finddata.cFileName,_T(".")) == 0 || _tcscmp(finddata.cFileName,_T("..")) == 0 )
		{
			delete []pdir;
			continue;
		}

		if((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==0)
			DeleteFile(pdir);
		else
			DeleteDir(pdir);

		delete []pdir;
	}while(FindNextFile(hfind,&finddata));

	if(RemoveDirectory(path))
		return TRUE;
	else
		return FALSE;
}

codeUNINSTALL_INIT
Uninstall_Init(
    HWND        hwndParent,
    LPCTSTR     pszInstallDir
)
{
	UnregisterTodayItem(hwndParent, pszInstallDir);

	DeleteDir((TCHAR*)pszInstallDir);

	return codeUNINSTALL_INIT_CONTINUE;
}


分享到:
评论

相关推荐

    安装程序制作工具包及教程

    将多文件绿色软件打包成单文件exe程序,支持格式有exe、bat、cmd。 选项说明: 1、DOS :用命令行执行程序,也会出现黑窗口; 2、清除:程序执行完毕后,自动删除释放的临时文件; 3、压缩:新打包的程序通过UPX壳...

    网络工程师资料学习笔记

    但在硬件的驱动安装正确后,一般变动硬件的可能性不大,所以也可以考虑将这个备份删除,文件位于\windows\driver cache\i386目录下,名称为driver.cab,直接将它删除,通常这个文件是74M。 10、删除不用的输入法:...

    ProPlusWW.msi

    用360卸载office2010兼容包时,把一些文件删除了,office2010打不开,提示ProPlusWW.msi找不到,,在MSOCache里找到了它,就上传一下,2010 sp1更新也需要这个文件

    WinRAR V3.92 中文增强破解版

    本版本增强了卸载程序功能,可以在卸载时彻底清除 WinRAR 保存在非安装目录下的皮肤主题残留文件,同时可实现安装后自动应用一款外置皮肤主题,并自动屏蔽 WinRAR 右键关联菜单中的“E-mail”相关项目。  ◆更新 7...

    WIN XP蓝屏代码大全

    如果错误出现在系统启动过程中, 请进入安全模式, 将蓝屏信息中所标明的文件重命名或者删除. (3)如果错误信息中明确指出Win32K.sys: 很有可能是第三方远程控制软件造成的, 需要从故障恢复控制台中将对该软件的服务...

    windows 服务器注意windows的temp临时目录(temp文件过大问题)

    windows解压缩包、安装软件时,会生成一些临时文件存放在temp目录中,windows不会自动删除这些文件,在工作机or个人PC机中中这个目录一般不会有什么问题,但是在server机器中,如果有服务进行大量的软件安装卸载或者...

    7-zip 中文版(解压软件) v9.33 多语官方版.exe

    或者依次打开我的电脑->卸载或更改程序->卸载你所卸载的软件,您可以用 Window XP控制面板中的添加或删除程序功能,或用 Windows Vista、Windows 7中的程序和功能删除7zip , 然后点击开始卸载。

    电脑高手必备 Windows系统35招实用技巧

    什么是实用技巧,就是那种能经常用得着的值得收藏起来的应用方法。本文 中笔者就将向大家介绍35种Windows操作系统技巧,招招实用,招招值得你把 他保存到你的电脑中或者把这篇文章的地址收藏到收藏夹里。  1、...

    windowsnt 技术内幕

    理解系统策略 将FAT分区转变为NTFS分区 压缩文件 通过控制台压缩文件 复制和移动压缩文件 “磁盘管理器”工具简介 理解主分区 理解扩展分区 理解分区编号 通过“磁盘管理器”提交当前改变 理解带区集 创建带区集 ...

    精通Windows.API-函数、接口、编程实例.pdf

    15.1 创建cab文件 463 15.1.1 makecab.exe 463 15.1.2 压缩多个文件 464 15.1.3 Cabinet软件开发工具包(CABSDK) 466 15.2 编写INF文件 466 15.2.1 INF文件格式 466 15.2.2 Install节 468 15.2.3 Copy...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    精通WindowsAPI 函数 接口 编程实例

    15.1 创建cab文件 463 15.1.1 makecab.exe 463 15.1.2 压缩多个文件 464 15.1.3 Cabinet软件开发工具包(CABSDK) 466 15.2 编写INF文件 466 15.2.1 INF文件格式 466 15.2.2 Install节 468 15.2.3 Copy...

Global site tag (gtag.js) - Google Analytics