欢迎来到天天文库
浏览记录
ID:42562819
大小:746.50 KB
页数:12页
时间:2019-09-17
《installshield卸载实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、在后面的内容中,主要解答以下几个经常有朋友问到,却又往往得不到很好的解决的问题:如何创建卸载快捷方式?为什么卸载的时候不执行OnMaintUIBefore和OnMaintUIAfter?为什么卸载的时候不执行OnUnInstall?为什么卸载的时候并没有调用OnMaintUIBeforeXXXX或者OnUnInstall,甚至连OnBegin、OnAppSearch、OnShowUI等等事件处理函数都没有调用?为什么第二次运行安装程序的时候毫无提示就卸载了以前的版本并没有调用OnMaintUIBeforeXXXX或者OnUnInsta
2、ll?--------------------------------------------------------------------------------关于如何创建卸载快捷方式的问题,请参考:〈InstallShield:CreatingUninstallationShortcut创建卸载快捷方式〉一文请记住那个表格。在脚本中创建卸载快捷方式最好的方法就是用用于定义常量UNINSTALL_STRING提供的值。而在IS操作界面中创建卸载快捷方式最好参考帮助中(参考该文)表格的方法,根据不同的项目类型采用不同的方法。如果用
3、IS提供的方便功能创建的卸载快捷方式有些毛病,最好改改——至于原因,在后面会提到。--------------------------------------------------------------------------------为什么卸载的时候不执行OnMaintUIBefore和OnMaintUIAfter?为什么卸载的时候不执行OnUnInstall?在GeneralInformation->ProjectProperties你能看到:EnableMaintenance这一选项。如果设置为Yes,那么当用户在一台已经
4、安装了该软件的计算机上再次运行安装程序,则会自动运行OnMaintUIBefore和OnMaintUIAfter事件处理函数中的脚本。如果设置为No,那就会调用UnInstall事件处理函数的脚本。那么,如果卸载的时候不执行这两个事件处理函数的脚本,就要检查一下这一设置了。但(呵呵,这里有个“但”),卸载的时候也可能不运行这两个函数以及OnUnInstall,耐心看下去吧。--------------------------------------------------------------------------------为什
5、么卸载的时候并没有调用OnMaintUIBeforeXXXX或者OnUnInstall,甚至连OnBegin、OnAppSearch、OnShowUI等等事件处理函数都没有调用?1、安装程序如果运行在“安静”模式下,则不会执行这些事件处理脚本。比如setup.exe/s或者IDriver.exe/M{ProductCode}/uninst这样的调用(请参考:〈InstallShield:CreatingUninstallationShortcut创建卸载快捷方式〉一文)。2、如果不是在“安静模式”,用户在控制面板的添加删除程序中,直接
6、点了列在程序项后面的“删除”而不是“更改”,则会运行在REMOVEONLY模式下。此时不出现维护界面,但并不是没有执行相应脚本。假如EnableMaintenance的设置为Yes,按照上面的说法,显然应该执行OnMaintUIBefore事件处理函数的脚本,但因为其默认代码如图:所以不会调用SdWelcomeMaint,也就不会出现维护界面。所以容易错以为OnMaintUIBefore没有效果。我们来看看“添加删除程序”的按钮和设置的关系:其设置结果如图:3、不同的方法创建的卸载快捷方式也可能导致卸载过程不执行任何脚本。最近一次为x
7、zSQLDeploy制作安装程序(请参考〈InstallShieldExample:演示xzSQLDeploy和xzIISConfig脚本的使用〉一文提供的InstallShieldX制作的范例),我采用了IS提供的快捷功能来创建卸载快捷方式:在ProjectAssistant方式下的ApplicationShortcuts这一步执行左边的CreateanUnstallationShortcut(请参考〈InstallShield:CreatingUninstallationShortcut创建卸载快捷方式〉一文):结果对比发现该快捷
8、方式采用的是MSIExec.exe的/x参数来进行卸载——于是卸载不是运行在IS下,没有调用IS的事件处理函数的脚本。所以,如果使用IS提供的快捷功能创建快捷方式,记着检查其Target。如果需要在卸载的时候执行一些特别
此文档下载收益归作者所有