InstallShield 做的安装包的版本更新问题

ccnuxjg 2003-03-24 04:08:19
用InstallShield做了安装包a之后,如果当前机器上已经有了a的旧版本。我现在要在这台机器上面直接覆盖安装,该怎么做?

我用8.0的upgrade属性来做的话,如果我的安装包里面有abc.exe和readme.txt两个文件,我直接更新以前的版本,readme.txt文件可以被更新,但是abc.exe却总是旧版本的文件。这是怎么回事啊?
...全文
268 点赞 收藏 9
写回复
9 条回复
dawner 2003年04月29日
兄弟,我已经知道怎样做了,原理正如上面zhaoziy(天翔)所说,只不过操作不是那样,我的做法是在OnMaintUIBefore()过程中用一个If语句来判断,首先你将 PROGRAMFILES ^ "InstallShield Installation Information"^“GUID”下面的所有文件先Copy出来,然后再在注册表里面读一键值(当然首先注册表里键值就不存在),如果不存在表示现在你想用覆盖的方式来安装此时你就选用修复的程序语句来控制ComponentReinstall(); 在修复完后你再将键值填上,同时将刚才你Copy的文件再Copy回去,覆盖掉现在安装的信息,如果键值存在你就卸载,此时执行本应Remove里面的内容。注意每次升级时所设的键值都是新的,不能重复。如果有问题给我来Email:dawner@yeah.net,欢迎探讨!!我使用这种方法已经完成我的Project。
补充一点,Copy原来的文件来覆盖现在的安装信息是在OnMaintUIAfter过程里面做的,不是OnMaintUIBefore里面,注意!
回复 点赞
zhaoziy 2003年04月25日
改写OnMaintUIBefore(),用OnFirstUIBefore()的所有代码进行替换即可。

dawner(dawner) 的问题,思路如下:
将SdWelcomeMaint用AskOptions换掉,就可以使用你自己想让用户看到的选项。可以仅给定两个选项,一是修复,调用ComponentReinstall();二是卸载,调用ComponentRemoveAll()。
有问题可以问我:tianxiang122@sohu.com
回复 点赞
qiuafa 2003年04月15日
劫分&捧场
回复 点赞
ccnuxjg 2003年04月09日
楼上的老大,我就是要做这样的功能阿
回复 点赞
dawner 2003年04月07日
((修改你对应的那个文件所对应的Component属性有一项选择为Always overwrite(总是覆盖方式)))
你这种解决问题的过程中是不是会出现一个让你选择安装类型的窗口(Modify,Repair,Remove)三个,能不能在安装的过程中如果直接检测到现在的文件新就直接替换,而不要弹出选择框(Modify,Repair,Remove),直接选用Repair呢,怎么做,有源码吗?Email:dawner@yeah.net!谢谢!!
回复 点赞
BlueSunspot 2003年04月04日
修改你对应的那个文件所对应的Component属性有一项选择为Always overwrite(总是覆盖方式)
回复 点赞
aiyaya 2003年04月04日
up
回复 点赞
ccnuxjg 2003年04月02日
继续up
回复 点赞
ccnuxjg 2003年03月28日
up
回复 点赞
发动态
发帖子
其他开发语言
创建于2007-08-27

3059

社区成员

1.5w+

社区内容

其他开发语言 其他开发语言
社区公告
暂无公告