Installshield脚本中安装时RegDBCreateKeyEx的注意事项
来源:互联网 发布:淘宝同城送货上门 编辑:程序博客网 时间:2024/05/23 14:30
1. 现象:
软件A和软件B在注册表同一个节点下有各自的子节点,比如在
HKEY_LOCAL_MACHINE\Software\MyCompany\COMMON下有SoftwareA和SoftwareB两个子项,各自又分别有自己的键值。
在卸载时发现先安装的软件被卸载后,COMMON这一层的节点也会被删除,导致另一个软件的注册项也被删除。
2.原因
安装脚本中用如下代码添加注册表项:
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );RegDBCreateKeyEx ("Software\\MyCompany\\COMMON\\SoftwareA" ,"");RegDBSetKeyValueEx ("Software\\MyCompany\\COMMON\\SoftwareA", "Value1" , REGDB_STRING , "xxx" , -1);RegDBSetKeyValueEx ("Software\\MyCompany\\COMMON\\SoftwareA", "Value2" , REGDB_STRING , "xxx" , -1);
上述第二句在创建节点时,如果发现上一层不存在,则会逐层依次添加,而添加的节点都会被InstallShield记录下来,以便在卸载时删除这些节点。第一个软件安装时创建了COMMON节点,其他软件安装时无需再创建,卸载时也就不会删除,而第一个安装的软件在卸载时会删除COMMON节点,导致COMMON节点下的子节点被一并删除。
3. 解决方法
在RegDBCreateKeyEx("Software\\MyCompany\\COMMON\\SoftwareA" ,"");语句前加入如下代码:
if(RegDBKeyExist("Software\\MyCompany\\COMMON") < 0) then Disable(LOGGING); RegDBCreateKeyEx ("Software\\MyCompany\\COMMON" ,""); Enable(LOGGING);endif;
Disable(LOGGING);表示禁用InstallShield的记录功能,此后的操作不会被记录,因此在卸载时也不会恢复。Enable则重新恢复记录功能。
上述代码的一个隐患是COMMON节点永远不会被删除,不过可以在卸载脚本中添加代码进行判断,当COMMON下没有子节点时将其删除。
- Installshield脚本中安装时RegDBCreateKeyEx的注意事项
- InstallShield安装脚本
- Installshield 和 NextInstaller 在安装脚本中调用 VBScript 的比较
- Installshield安装MSDE数据库脚本
- Installshield安装MSDE数据库脚本
- 用InstallShield检测是否安装IIS的脚本
- 在installshield 脚本中添加log的方法
- InstallShield中注册SQL Anywhere 7.0 ODBC的完整脚本
- InstallShield 2009制作安装包注意事项
- Installshield 关于SQL的脚本
- installshield脚本实现windows服务安装
- InstallShield使用脚本打包安装msi应用
- InstallShield中禁止反安装
- InstallShield的安装程序中对文件系统进行操作(转)
- windows中使用installShield制作windows服务的安装包
- 些脚本的时,注意事项
- InstallShield在MySQL和Oracle中执行SQL脚本的方法InstallShield在MySQL和Oracle中执行SQL脚本的方法
- LR中运行QTP脚本的注意事项
- 王爽《汇编语言》实验8
- android4.1.2 browser下载音乐文件中文名乱码问题解决
- ajax 设置全局同步
- 位操作基础篇之位操作全面总结
- android圆盘菜单效果
- Installshield脚本中安装时RegDBCreateKeyEx的注意事项
- 字符串总结
- js验证图片格式和大小并预览
- 《单元测之道》笔记
- x86汇编指令详解
- wmctrl控制窗口应用范例
- 硬盘坏了
- 面试3
- 判断两个整数的大小