安装包设计-------卸载(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 <你要 ...
随机推荐
- canvas绘制文本自动换行
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- 最快得到MYSQL两个表的差集
Mysql里不外乎就是 子查询 和 连接 两种方式. 设第一个表为table1, 第二个为table2, table1包含table2. sql为: //子查询 select table1.id fr ...
- POJ2503(Babelfish)--简单字典树
思路:就是用一个字典树翻译单词的问题,我们用题目中给出的看不懂的那些单词建树,这样到每个单词的叶子结点中存放原来对应的单词就好. 这样查询到某个单词时输出叶子结点存的就行,查不到就"en&q ...
- 下拉框选择 <from:select>
- python matplotlib绘制六种可视化图表
1. 折线图 绘制折线图,如果你数据不是很多的话,画出来的图将是曲折状态,但一旦你的数据集大起来,比如下面我们的示例,有100个点,所以我们用肉眼看到的将是一条平滑的曲线. 这里我绘制三条线,只要执行 ...
- 一步一步教你实现iOS音频频谱动画(一)
如果你想先看看最终效果再决定看不看文章 -> bilibili 示例代码下载 第二篇:一步一步教你实现iOS音频频谱动画(二) 基于篇幅考虑,本次教程分为两篇文章,本篇文章主要讲述音频播放和频谱 ...
- UMI.js开发知识总结
五分钟掌握最小知识体系 本文阅读时间大概为5分钟,但是能让你了解基于UMI和DVA构建项目的最小知识体系,你可以粗略的浏览一下本文所提到的知识,在后续的讲解中都会多次重复提起,保证学习效率.由于现在前 ...
- Spark学习笔记2——RDD(上)
目录 Spark学习笔记2--RDD(上) RDD是什么? 例子 创建 RDD 并行化方式 读取外部数据集方式 RDD 操作 转化操作 行动操作 惰性求值 Spark学习笔记2--RDD(上) 笔记摘 ...
- 第三章 Django之动态网页基础(1)
前一章中,我们解释了如何建立一个 Django 项目并启动 Django 开发服务器.当然,那个网站实际并没有干什么有用的事情,它所做的只是显示 It worked!消息.让我们来做些改变.本章将介绍 ...
- Linux学习之七-配置Telnet连接Linux服务器
配置Telnet连接Linux服务器 通过telnet可以从windows平台访问linux 服务器 ,实现和ssh 客户端一样的效果,区别在于通过ssh连接更安全. 检查Linux系统中是否安装了t ...