在InstallShield制作安装盘时如何取消反安装功能?

hangcom 2002-12-11 09:04:36
在InstallShield制作安装盘时如何取消反安装功能?

我在执行完安装程序后却发现内存中注留了Setup.exe 和 IKernel.exe,是否有解决方法?
...全文
73 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoziy 2003-02-27
  • 打赏
  • 举报
回复
更简单的方法:添加一个空的OnMaintUIAfter()即可。
hangcom 2002-12-22
  • 打赏
  • 举报
回复
确实会留下垃圾文件,但这样也不是什么重要的事,因为对我来说这点垃圾不算什么,否则也可以执行删除操作。当然,如果InstallShield能提供直接的取消反安装的功能是最好的。
另外,内存中驻留了Setup.exe和IKernel.exe的原因也查清了,是在调用外部的dll时,初始化时使用了CoInitializeEx而不是CoInitialize。
hooklee 2002-12-13
  • 打赏
  • 举报
回复
hangcom的方法可能还有点问题,就是系统在安装的时候会在C:\Program Files\InstallShield Installation Information目录下建立一个名为“{InstallationGUID}”的目录,存放反安装信息和setup脚本和必要的文件。按照hangcom的方法,虽然可能在控制面板里面看不到反安装的东西,但是却在系统里面留下了垃圾。
moonet 2002-12-13
  • 打赏
  • 举报
回复
对,同意楼上的,InstallShield就是靠这个注册表的键值来判断自身是否被安装过,在安装的最后过程删掉就可以了。
leoyang99 2002-12-11
  • 打赏
  • 举报
回复
讨论讨论,强烈关注,
hangcom 2002-12-11
  • 打赏
  • 举报
回复
目前还没有在InstallShield中找到其它可取消反安装的操作,于是我通过删注册表的操作完成了这步工作,具体步骤如下:

1、通过文本编辑器打开ipr工程文件,找到其中的InstallationGUID项,这个值对应的是注册表中的key。

2、在InstallShield的脚本中加入function OnEnd(),代码如下:

function OnEnd()
string deleteKey;
number ret;
begin
//这个值需要根据InstallShield工程的不同而改变
InstallationGUID="{fd580647-8e18-4017-9316-ff6c6150162c}";
//
deleteKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + InstallationGUID;
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
ret = RegDBDeleteKey(deleteKey);
end;

3、重新编译后即可去除反安装功能

为保险起见,我还删除了OnMoving函数中的RegDBSetItem

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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