查看: 157|回复: 2

[纯净水] 处理卸载部分比较费劲

[复制链接]
sn4735 发表于 2025-1-18 18:12 | 显示全部楼层 |阅读模式
快御云安全
最近几个月在用NSIS做绿色精简版Office 2010的安装包(由于自己技术菜+要求多,是“几个月”而不是“几天”)
xb21cn大佬(该精简版的作者)说可以删除不想要的组件
可以手动删除一些文件.jpg
于是制作安装包时自然想有一个组件选择页面
组件选择界面.jpg


发现个问题,安装时如果勾选安装了可选组件,卸载时卸载程序不知道当时有没有安装这个可选组件

如果直接简单粗暴地检测有没有这个组件的文件,有就删除,个人觉得不靠谱,毕竟要考虑极端情况,万一用户出于探索,将他个人的文件改成这个组件的其中一个文件的名称,然后放在安装目录下(替换掉原有的文件),岂不是把用户的文件删了?
可以增加MD5校验,但感觉还是有点别扭,万一别的软件也有这个文件,并且“巧合”地把该文件放到Office 2010 精简版安装目录下,我把Office 2010 精简版卸载了,别的软件岂不是没法用了?
目前想法是安装时选择了哪个组件,则将在注册表中做标记。卸载时读取注册表,如果注册表中有这个标记,则表明安装时选择了这个组件,使得卸载程序可以知道安装时有没有选择该组件
另一种办法是将标记记录在安装目录下,但这样被误删的几率更大,毕竟打开我的电脑比打开注册表编辑器的频率更高+找到软件的注册表项比找到软件的安装目录更麻烦。
还有一种办法是重新编译NSIS自己。这软件是开源的,编译时有一个选项,如果打开,软件将附带“记录安装日志”功能,安装时做了什么事情,会记录在日志中。卸载时根据安装日志,“反着来”。所以不再担心安装时如果选择这个组件,卸载时卸载程序不知道怎么办(实际仍然不知道,但懂得删除这个组件的文件)。但对于注册dll这种稍微高级点的小动作,卸载程序是否知道应该怎样反着来?以及,听说安装日志是以文件的形式保存在安装目录下,自己不喜欢在安装目录下保存信息的方案。何况我没开发环境+不会把源代码编译成exe。所以该方案暂时算了
所以目前采用在注册表中做标记的方式
不排除有更好的方案,但我不知道了
事实上,本人讨厌任何需要在外部做标记的方案,包括注册表这种方案。毕竟考虑极端情况,在外部做标记,意味着该标记可能会被删除,以及,我不喜欢把一些信息单独存放在外面,以及由于流氓软件的猖獗,很讨厌“写注册表”、“在C盘写文件”这种动作
NSIS最不友好的就是“卸载程序不知道安装时有没有选择这个组件”(除了这一点感觉其他还行)。如果能把相关的标记写进UnInstall.exe中就好了(不排除真的可以)

评分

1

查看全部评分

15ice 发表于 2025-1-19 17:00 | 显示全部楼层
差不多就行了,没人这么无聊把文件改名放程序文件夹,大厂的卸载程序都没你这么严谨。
回复

使用道具 举报

sn4735  楼主| 发表于 2025-1-20 10:04 来自手机 | 显示全部楼层
15ice 发表于 2025-1-19 17:00
差不多就行了,没人这么无聊把文件改名放程序文件夹,大厂的卸载程序都没你这么严谨。 ...

哈哈哈哈 觉得网上制作各种工具的大神很厉害,想学习他们,于是删文件这种力所能及的事情对自己要求高
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋手机版联系我们

Copyright © 2005-2025 PCBeta. All rights reserved.

Powered by Discuz!  CDN加速及安全服务由「快御」提供

请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。

远景在线 ( 苏ICP备17027154号 )|远景论坛 |Win11论坛 |Win10论坛 |Win8论坛 |Win7论坛 |WP论坛 |Office论坛

GMT+8, 2025-3-14 01:01

快速回复 返回顶部 返回列表