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

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

我用8.0的upgrade属性来做的话,如果我的安装包里面有abc.exe和readme.txt两个文件,我直接更新以前的版本,readme.txt文件可以被更新,但是abc.exe却总是旧版本的文件。这是怎么回事啊?
...全文
446 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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

3,424

社区成员

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

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