分享+散分:自制简单的安装/卸载程序

凌乱哥 2014-04-17 09:28:16
加精
过程贴地址,感谢大家的踊跃相助

个人的工作项目已经完成,在此做了一个删减版的安装/卸载程序,贴出来供大家学习和参考。

先说一下我的实现方法
将发布的程序的运行目录打包成一个Zip文件,以资源方式加入到安装包的工程中,ID为IDR_ZIP1,然后用unzip类将资源释放到指定目录,形成一个安装文件夹,然后在桌面和开始菜单创建启动快捷方式和卸载快捷方式。
卸载的时候先删除相关快捷方式,删除的标准就是遍历lnk,只要其指向本目录,则删除。然后删除所在目录下的所有文件,再删除自身。说到删除自身,是我从网上找的代码,成功率只有20%左右,领导说算了,无大碍,就懒得深究了。。。

再简单介绍一下关键知识点
安装程序:
1.如何获取电脑中的常用目录,如Program Files、桌面、开始菜单的程序目录,详见CInstallSetDlg的构造函数和BOOL CInstallFinishDlg::CreateLnk(IShellLink * psl,UINT uiType,CString strLnkName,BOOL bCreateDir)
2.如何释放资源中的压缩包文件IDR_ZIP1到指定目录下,详见void CInstallCopyDlg::StartCopy(LPCTSTR lpPath)
3.如何为指定exe创建快捷方式,详见BOOL CInstallFinishDlg::CreateLnk(IShellLink * psl,UINT uiType,CString strLnkName,BOOL bCreateDir)
4.unzip.h和unzip.cpp是一个很强大的类,对应的还有zip.h和zip.cpp,网上可以找得到

卸载程序:
1.如何删除指定快捷方式。遍历快捷方式,只要它指向本卸载程序所在的目录,则删除,详见void CUninstallDlg::ClearLnk()和void CUninstallDlg::DeleteLnk(CString strDir,BOOL bDeleteDir)
2.如何删除卸载程序自身。网上找的代码,详见void CUninstallDlg::DeleteSelf()

相关链接:
VC如何将资源中包含的位图释放成文件

源码下载:
还是收一块钱意思意思吧。。。

最后,大家如果有更好的删除自身EXE的代码和例子,麻烦也分享一下。。。
...全文
10310 103 打赏 收藏 转发到动态 举报
写回复
用AI写文章
103 条回复
切换为时间正序
请发表友善的回复…
发表回复
凌乱哥 2016-06-23
  • 打赏
  • 举报
回复
引用 100 楼 hehaho112 的回复:
请教一个问题,我仿照楼主的写了一个,安装在C:\Program Files (x86)目录下,里面的文本文件没有权限编辑,请问这个怎么破?我打包前能编辑,打包后的压缩文件能编辑,为何安装复制到程序文件夹下就没权限编辑了?要编辑得修改权限,但这比较麻烦。请问有什么比较好的办法没?
1.代码提升权限,搜索一下网上很多 2.安装到C盘以外
整容失败 2016-05-04
  • 打赏
  • 举报
回复
牛擦
hehaho112 2016-04-24
  • 打赏
  • 举报
回复
刚才试了下,拷进去的文件都没编辑的权限了。需要修改权限后才能编辑
hehaho112 2016-04-24
  • 打赏
  • 举报
回复
请教一个问题,我仿照楼主的写了一个,安装在C:\Program Files (x86)目录下,里面的文本文件没有权限编辑,请问这个怎么破?我打包前能编辑,打包后的压缩文件能编辑,为何安装复制到程序文件夹下就没权限编辑了?要编辑得修改权限,但这比较麻烦。请问有什么比较好的办法没?
剑开天门 2015-12-20
  • 打赏
  • 举报
回复
mark下,顺便求分
zsyok 2015-12-13
  • 打赏
  • 举报
回复
不錯,學習了。。。
shuzhongxunyu 2014-08-19
  • 打赏
  • 举报
回复
lrzxc 2014-08-16
  • 打赏
  • 举报
回复
嗯,慢慢学习
lrzxc 2014-08-01
  • 打赏
  • 举报
回复
哦,这个东西不错的,思路很好。
Wanted__杰 2014-07-10
  • 打赏
  • 举报
回复
感觉这些东西还离我好远。。。菜鸟一只
孟如庭 2014-05-12
  • 打赏
  • 举报
回复
表示热切关注
hemmingway 2014-05-04
  • 打赏
  • 举报
回复
_skytrails 2014-05-03
  • 打赏
  • 举报
回复
我现在在路上 2014-05-03
  • 打赏
  • 举报
回复
赞,学习了......
sichuanwww 2014-05-03
  • 打赏
  • 举报
回复
wangsufu77 2014-05-02
  • 打赏
  • 举报
回复
Rocloud 2014-05-02
  • 打赏
  • 举报
回复
进来感受一下气氛,学习学习
  • 打赏
  • 举报
回复
谢谢楼主分享,学习了
principl 2014-05-01
  • 打赏
  • 举报
回复
真心的学习了!
fdsdfdsf 2014-04-29
  • 打赏
  • 举报
回复
25楼正解。MOVEFILE_DELAY_UNTIL_REBOOT标志就是为卸载做的。
加载更多回复(74)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧