安装包设计-------卸载(MFC)---------知识总结
1、删除目录及其下所有文件
bool MyDeleteFile(CString Path)
{
// SHFILEOPSTRUCT FileOp={0};
// FileOp.fFlags = FOF_ALLOWUNDO | //允许放回回收站
// FOF_NOCONFIRMATION; //不出现确认对话框
// FileOp.pFrom = Path;
// FileOp.pTo = NULL; //一定要是NULL
// FileOp.wFunc = FO_DELETE; //删除操作
// return SHFileOperation(&FileOp) == 0; char* sDirName = new char[Path.GetLength()+];
strncpy(sDirName,Path,Path.GetLength()+); CFileFind tempFind;
char sTempFileFind[] ;
sprintf(sTempFileFind,"%s/*.*",sDirName);
BOOL IsFinded = tempFind.FindFile(sTempFileFind);
while (IsFinded)
{ IsFinded = tempFind.FindNextFile(); if (!tempFind.IsDots())
{
char sFoundFileName[];
strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer()); if (tempFind.IsDirectory())
{
CString sTempDir;
sTempDir.Format("%s/%s",sDirName,sFoundFileName);
MyDeleteFile(sTempDir);
}
else
{
char sTempFileName[];
sprintf(sTempFileName,"%s/%s",sDirName,sFoundFileName);
DeleteFile(sTempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(sDirName))
{
return false;
}
return true; }
2、删除应用程序自身
BOOL DeleteApplicationSelf()
{
TCHAR tcsExename[MAX_PATH];
TCHAR tcsParam[MAX_PATH * ];
TCHAR tcsCmd[MAX_PATH];
HANDLE hProcess = NULL; // get exe filename and command shell program
//_tcscpy(tcsExename,m_appPath);
if( == GetModuleFileName(NULL,tcsExename,MAX_PATH)|| == GetEnvironmentVariable(_T("COMSPEC"), tcsCmd, MAX_PATH))
{
return FALSE;
} // get short filename for command shell program
if( == GetShortPathName(tcsExename, tcsExename, MAX_PATH))
{
return FALSE;
} // create a command process, set its priority, then start it.
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
ZeroMemory( &pi, sizeof(pi) );
_stprintf(tcsParam, _T("%s /c del %s"), tcsCmd, tcsExename);
if(!CreateProcess(NULL,tcsParam,NULL,NULL,FALSE,CREATE_SUSPENDED, NULL,NULL,&si,&pi))
{
return FALSE;
// GetLastError();
} // heigthen priority of the current process
SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); // set file attribute to normal
SetFileAttributes(tcsExename, FILE_ATTRIBUTE_NORMAL); // depress priority of command process, then start it
SetPriorityClass(pi.hProcess, IDLE_PRIORITY_CLASS);
ResumeThread(pi.hThread);
return TRUE;
}
安装包设计-------卸载(MFC)---------知识总结的更多相关文章
- R语言-查看加载包、卸除加载包及安装包与卸载包
在R语言中,常需要看哪个包加载了或是看多个相似功能的包,看到底是哪个包在起作用,通过加载和卸除后进行运行比较分析. 1.查看已加载的包 >(.packages()) 注意外面的括号和前面的点不能 ...
- 利用VS2017制作软件安装包与卸载程序
本博客讲述如何利用VS2017制作安装包以及相应的卸载程序,并解决过程中可能遇到的问题 一.制作安装程序 1.打开VS2017,新建项目,选择如下图所示程序: 新建成功后,会出现如下图所示目录: 2. ...
- 安装包设计-------打包(MFC)---------知识总结
目录: 1.选择文件夹 2.判断文件夹或文件是否存在 3.通过cmd命令行向程序中传递参数. 4.路径处理 5.文件夹以及文件的删除 6.复制文件 7.创建目录 8.从当前的应用程序中抽取资源 9.引 ...
- 安装包设计-------安装(QT)---------知识总结
1.判断文件是否存在 QFile file(path): file.exists(); 2.复制文件 bool copy(const QString &fileName, const QStr ...
- 【转】C#安装包(自动卸载低版本)
一:版本号升级 1.ProductCode.Version(version比前一版本要高比如以前1.0.0现在就是1.0.1), 2.保持UpgradeCode不变(当设置RemovePrev ...
- 使用Visual Studio制作安装包
目 录 第1章 合并模块 3 1.1 SystemDll 3 1.1.1 收集文件 3 1.1.2 新建项目 4 1.1.3 增加自定义文件夹 4 1.1.4 设置部署位 ...
- NSIS打包(二)第一个安装包
基本介绍完之后,我们大概了解了NSIS中有哪些组件,现在我们通过一个简单的demo来学习如何使用这些组件. 1.环境配置 NSIS的环境非常简单,只有一个安装包,安装后即可使用. 官网:http:// ...
- 修改visual studio setup 安装顺序(解决新版安装包无法自动移除老版本程序的问题)
背景 visual studio setup 支持自动删除之前版本的安装,需要设置RemovePreviousVersions = true, DetectNewerInstalledVersion ...
- ubuntu apt-get 总结 install xxx -d能下载安装包(含依赖)不安装_和卸载(转载)
[举例] 目前常用的 ========== *更新本机中的数据库缓存: sudo apt-get update *查找包含部分关键字的软件包: sudo apt-cache search <你要 ...
随机推荐
- [ZJOI2007]捉迷藏 (线段树,括号序列)
大意: 给定树, 要求维护一个点集, 支持删点添点, 询问点集直径. 本题做法比较多. 一个显然的做法是, 线段树维护区间直径, 然后根据点集直径的性质, 合并后直径端点一定是四个端点其中两个, 枚举 ...
- 基因组所三代单分子测序PacBio完成技术升级—超长读长助力基因组学研究
基因组所三代单分子测序PacBio完成技术升级—超长读长助力基因组学研究 2015-09-23 | 作者:所级中心基因组平台 张兵 [关闭] 近日,基因组所所级中心基因组平台三代单分子实时测序PacB ...
- wstngfw中配置snort
wstngfw中配置snort 概述 Snort是入侵检测和预防系统.它可以将检测到的网络事件记录到日志并阻止它们.Snort使用称为规则的检测签名进行操作. Snort规则可以由用户自定义创建,或者 ...
- vue基本语法概要(一)
先看两种代码,再进行讲解 第一种格式: <template > <div> <div v-for=" item in sites "> < ...
- 你不知道的javascript(上卷)读后感(二)
this词法 熟悉ES6语法的开发者,箭头函数在涉及this绑定时的行为和普通函数的行为完全不一致.跟普通this绑定规则不一样,它使用了当前的词法作用域覆盖了this本来的值. 误解 this理解成 ...
- maven项目下pom.xml依赖报错
百度了好几次,说是在本地仓库下少plugin,但是找了之后,发现并没有少呀
- Netty UDP 使用采坑
使用Netty搭建UDP服务收集日志,使用过程中发现,部分日志接收不到,排查发现,都是大日志记录不到,后查询相关文档进行如下修改 EventLoopGroup workerGroup = new Ni ...
- gitlab安装教程 正在修炼的西瓜君
查看内存配置 我们先不急着来安装gitlab,先来看一下自己电脑的内存情况,我把这一步提到最前面,是因为这是我安装过程中遇到的最大的坑. 下面是gitlab的cpu和内存需求(https://do ...
- C语言判断一个32位的数据,有多少位是1,然后用串口发送出来
今天遇到了一个问题,遇到一个32位的数据,写一个子函数来判断它的多少位是1.我的思路一开始是把这个数据变成一个32位容量的数组然后每个位去比较是不是1,如果是1,就用另一个变量加1.最后返回这个变量. ...
- ping加上时间信息
一.linux系统ping加时间戳信息 1.ping 加时间信息,然后还要实时保存到一个文件中,那么就与awk结合 ping 115.239.211.112 -c 10 | awk '{ print ...