【InstallShield】 为什么卸载后有的文件没有删掉

1.Component的属性Permanent设置为Yes。
2.Component的ID为空。
3.Component被其他应用程序或者Feature使用。
4.设置了一个Condition,在安装时启用某个Feature,卸载时禁用该Feature。意思就是卸载的时候不卸载某个Feature,所有它对应的文件也会保留。
5.Component的关键文件在这个键值下有先前的引用HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/SharedDLLs.
6.Component安装在系统文件夹下面,它的某个文件在这个键值下有先前的引用
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/SharedDLLs.
7.该文件受Windows Resource Protection (WRP)或Windows File Protection (WFP)保护。我解释一下5和6点,因为我遇到的问题就是因为这个原因。我在工程里开启了“Only for me”和"For All Users"的功能。当用户选择Only for me,第一次安装可以正常卸载,但是第二次安装在同一路径的话,卸载后文件都保留了下来。原因是在InstallShield里新建一个组件的时候,Shared属性默认为YES。这就意味着这个组件成为了一个SharedDLL。安装的时候,InstallShield会在注册表的HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/SharedDLLs 这个键值下为每一个SharedDLL写一条信息。如果在卸载的时候该用户并没有删除这个键值的权限,结果这些键值都保留了下来。第一次卸载是没有问题的,文件被删除了。但是当用户第二次安装在同一个目录的时候,就会出现5和6的情况,每一个Component都有一个先前的引用,这个时候卸载的话,文件都会保留下来。解决的方法就是把Component的Shared属性设置为NO。如果你的Component很多的话就不要去Componenent界面改了,打开Direct Editor界面,找到Component表,可以发现这个表里面并没有Shared列。其实只要把Attributes(i2)列的值改成0就可以了。如果你有其他的设置的话可能你要实验一下你的Attributes(i2)列该取什么值。在Component界面改一下,然后后头看表里面就知道了。这样设置之后安装在非系统目录是没有问题的,但是如果安装在“C:/Program Files”这样的系统目录还是可能出现无法删除文件的问题。很显然,这是因为第7点了。解决的方法就是给文件夹授权。
 
文章来自【swxd594】的回答:http://zhidao.baidu.com/link?url=QjgrAM3bEaLvRbr6kPn-PnIIJf5O77QD5tC2FIeAWcuCL8vBDaYoETlaG8vfp5-lUaY0cP13n5EMSx9hF4vFnq0j8YZJVRdkeRgZo4Ov5ru
时间: 2024-08-25 11:20:45

【InstallShield】 为什么卸载后有的文件没有删掉的相关文章

xp下删除windows7,无法删除windows7文件夹,无法删除windows7文件,双系统卸载,取得文件权限

http://blog.csdn.net/lanmanck/article/details/5722050 -------------------------------------------------- 找了比较久,这个强人写的,很佩服,贴出来共享: http://hi.baidu.com/wjg750926/blog/item/4046a84ab171d92b08f7ef27.html 一些网友在Xp 下安装了Windows 7(适用于Vista/WS2008) 双系统,试用一段时间之后

[经验] Win7减肥攻略(删文件不删功能、简化优化系统不简优化性能)

☆心梦无痕☆ 发表于 2014-1-24 11:15:04 https://www.itsk.com/thread-316471-1-11.html 首先 开启Administrator 用户 删除其他用户! 1.删除休眠文件 “以管理员身份运行,所有程序→附件→命令提示符”,右击选择“以管理员身份运行”,进入命令提示符后,手工输入“powercfg-h off” 这是干什么的,木星人也会知道……2.关闭系统保护计算机右键属性——高级管理设置——系统保护3.转移虚拟内存计算机右键属性——高级管理

硬盘空间满导致mysql ibd文件被删后提示Tablespace is missing for table 'db_rsk/XXX"

昨天一早,开发人员反馈说一个测试环境报Tablespace is missing for table 'db_rsk/XXX",周末刚升级过,特地让开发回去查了下,说脚本中肯定没有drop table的操作.datadir下检查了下,发现frm文件在的ibd文件没有了,bing了下,没发现类似异常.于是先回到mysql.err往回搜索,半天后发现上周五下午mysql出现了一次异常宕机,说是磁盘空间不足了,看日志该文件被损坏了,如下: 2016-11-12 11:31:00 28443 [ERRO

sqlserver 删掉日志文件ldf以后 救命语句

sqlserver 删掉日志文件ldf以后  救命步骤: 先新建一个新数据库, 删掉新建的 .mdb 用想要还原的mdb覆盖 执行下面的语句 ALTER DATABASE 'DB_Core' SET RECOVERY SIMPLE; alter database DB_Core set emergency alter database DB_Core set single_user dbcc checkdb('DB_Core',REPAIR_ALLOW_DATA_LOSS) dbcc check

【翻译自mos文章】在unix/linux中使用文件描述符(File Descriptors)来找回被删掉的文件(数据文件or redo log)

在unix/linux中使用文件描述符(File Descriptors)来找回被删掉的文件(数据文件or redo log) 参考原文: Retrieve deleted files on Unix / Linux using File Descriptors (Doc ID 444749.1) 适用于: Oracle Database - Enterprise Edition - Version 8.1.7.0 to 11.2.0.3 [Release 8.1.7 to 11.2] Linu

怎么删掉xampp文件夹

删掉xampp文件夹时,提示:操作无法完成,因为其中的文件夹或文件已在另一程序中打开 具体的解决方法: 菜单栏输入:服务 找到apachezt和mysqlzt,并禁用    -- 因为之前打开Zentao时已经启用apache和mysql服务 重启电脑 删除xampp文件夹成功 原文地址:https://www.cnblogs.com/huainanhai/p/11105849.html

cocos2dx项目移植android平台使用第三方so库被删掉的问题

cocos2dx项目android平台在编译的时候会把libs/armeabi目录清空,这就是为什么我们编译的时候导入的第三方so库会被删掉的原因. 解决方案: 1. 在jni目录下新建prebuilt目录,并把要使用的第三方so库复制到该目录: 2.修改jni/Android.mk文件如下: ok!搞定!

【技巧】如何使用UltraEdit删掉某些行并且不留空行

例: 在S1这个文件中我想要把所有B6 96 FD 2E 49 96 2 D2的行删掉. 首先,查找这些序列,执行替换命令,替换为的内容不写. 点击"全部替换"之后,发现在原来的位置多了一行空行. 接下来是去掉空行的过程: 还是在替换对话框中,勾选下面的正则表达式,并且选择方式为UltraEdit 然后在查找什么那个框下面输入:%[ ^t]++^p 替换为 那个空格不填任何东西,点击全部替换,空行消失.

[转帖] cocos2dx项目移植android平台使用第三方so库被删掉的问题

原文地址: http://www.2cto.com/kf/201408/329559.html cocos2dx项目android平台在编译的时候会把libs/armeabi目录清空,这就是为什么我们编译的时候导入的第三方so库会被删掉的原因. 解决方案: 1. 在jni目录下新建prebuilt目录,并把要使用的第三方so库复制到该目录: 2.修改jni/Android.mk文件如下: ok!搞定!