installshield卸载实现.docx

上传人:b****2 文档编号:1834566 上传时间:2022-10-24 格式:DOCX 页数:12 大小:733.26KB
下载 相关 举报
installshield卸载实现.docx_第1页
第1页 / 共12页
installshield卸载实现.docx_第2页
第2页 / 共12页
installshield卸载实现.docx_第3页
第3页 / 共12页
installshield卸载实现.docx_第4页
第4页 / 共12页
installshield卸载实现.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

installshield卸载实现.docx

《installshield卸载实现.docx》由会员分享,可在线阅读,更多相关《installshield卸载实现.docx(12页珍藏版)》请在冰豆网上搜索。

installshield卸载实现.docx

installshield卸载实现

在后面的容中,主要解答以下几个经常有朋友问到,却又往往得不到很好的解决的问题:

如何创建卸载快捷方式?

为什么卸载的时候不执行OnMaintUIBefore和OnMaintUIAfter?

为什么卸载的时候不执行OnUnInstall?

为什么卸载的时候并没有调用OnMaintUIBeforeXXXX或者OnUnInstall,甚至连OnBegin、OnAppSearch、OnShowUI等等事件处理函数都没有调用?

为什么第二次运行安装程序的时候毫无提示就卸载了以前的版本并没有调用OnMaintUIBeforeXXXX或者OnUnInstall?

--------------------------------------------------------------------------------

关于如何创建卸载快捷方式的问题,请参考:

〈InstallShield:

CreatingUninstallationShortcut创建卸载快捷方式〉一文

请记住那个表格。

在脚本中创建卸载快捷方式最好的方法就是用用于定义常量UNINSTALL_STRING提供的值。

而在IS操作界面中创建卸载快捷方式最好参考帮助中(参考该文)表格的方法,根据不同的项目类型采用不同的方法。

如果用IS提供的方便功能创建的卸载快捷方式有些毛病,最好改改——至于原因,在后面会提到。

--------------------------------------------------------------------------------

为什么卸载的时候不执行OnMaintUIBefore和OnMaintUIAfter?

为什么卸载的时候不执行OnUnInstall?

在GeneralInformation->ProjectProperties你能看到:

EnableMaintenance这一选项。

如果设置为Yes,那么当用户在一台已经安装了该软件的计算机上再次运行安装程序,则会自动运行OnMaintUIBefore和OnMaintUIAfter事件处理函数中的脚本。

如果设置为No,那就会调用UnInstall事件处理函数的脚本。

那么,如果卸载的时候不执行这两个事件处理函数的脚本,就要检查一下这一设置了。

但(呵呵,这里有个“但”),卸载的时候也可能不运行这两个函数以及OnUnInstall,耐心看下去吧。

--------------------------------------------------------------------------------

为什么卸载的时候并没有调用OnMaintUIBeforeXXXX或者OnUnInstall,甚至连OnBegin、OnAppSearch、OnShowUI等等事件处理函数都没有调用?

1、安装程序如果运行在“安静”模式下,则不会执行这些事件处理脚本。

比如setup.exe/s或者IDriver.exe/M{ProductCode}/uninst这样的调用(请参考:

〈InstallShield:

CreatingUninstallationShortcut创建卸载快捷方式〉一文)。

2、如果不是在“安静模式”,用户在控制面板的添加删除程序中,直接点了列在程序项后面的“删除”而不是“更改”,则会运行在REMOVEONLY模式下。

此时不出现维护界面,但并不是没有执行相应脚本。

假如EnableMaintenance的设置为Yes,按照上面的说法,显然应该执行OnMaintUIBefore事件处理函数的脚本,但因为其默认代码如图:

所以不会调用SdWelcomeMaint,也就不会出现维护界面。

所以容易错以为OnMaintUIBefore没有效果。

我们来看看“添加删除程序”的按钮和设置的关系:

其设置结果如图:

3、不同的方法创建的卸载快捷方式也可能导致卸载过程不执行任何脚本。

最近一次为xzSQLDeploy制作安装程序(请参考〈InstallShieldExample:

演示xzSQLDeploy和xzIISConfig脚本的使用〉一文提供的InstallShieldX制作的例),我采用了IS提供的快捷功能来创建卸载快捷方式:

在ProjectAssistant方式下的ApplicationShortcuts这一步执行左边的CreateanUnstallationShortcut(请参考〈InstallShield:

CreatingUninstallationShortcut创建卸载快捷方式〉一文):

结果对比发现该快捷方式采用的是MSIExec.exe的/x参数来进行卸载——于是卸载不是运行在IS下,没有调用IS的事件处理函数的脚本。

所以,如果使用IS提供的快捷功能创建快捷方式,记着检查其Target。

如果需要在卸载的时候执行一些特别的动作(比如在你的脚本删除某些文件、删除创建的IIS站点等等),那就改为(这里的“7”根据对应的IS版本改为8、9、10):

(请参考〈InstallShield:

CreatingUninstallationShortcut创建卸载快捷方式〉一文)

[CommonFilesFolder]InstallShield\Driver\7\Intel32\IDriver.exe

连同参数,在目标计算机上就等同于

"%SystemDrive%\ProgramFiles\CommonFiles\InstallShield\Driver\10\Intel32\IDriver.exe"/M{你的产品的ProductCode}

如果你按照上面说的方法采用UNINSTALL_STRING,并调试输出其值,你会发现它就是上面的容^oo^

 

--------------------------------------------------------------------------------

为什么第二次运行安装程序的时候毫无提示就卸载了以前的版本并没有调用OnMaintUIBeforeXXXX或者OnUnInstall?

注意下图:

在Tools菜单中选择Options,在弹出窗口的Preferences这一页去掉对"Uninstallbeforeinstalling"的选中,重新编译并运行。

如果EnableMaintenance的设置为Yes,执行Setup.exe完成安装,然后再次执行Setup.exe就会出现下图所示的维护界面:

如果EnableMaintenance的设置为No,则执行OnUninstall事件处理函数的脚本。

如果不想出现那个讨厌的提示框,那你爱怎么改就怎么改了^oo^

Feedback

#XiaoZhu.:

[InstallShield]卸载相关问题2004-10-2412:

35piggybank

PingBack来自:

#re:

[InstallShield]卸载相关问题2004-10-2710:

19pk

piggybank,请教两个问题。

1.用installshieldX,能在脚本里远程调用另外一台机器里的可执行程序吗?

我用LaunchAppAndWait()试过,不行。

2.安装程序如何要实现以下功能:

先往被安装机器里拷贝一些文件,修改注册表,重新启动机器,然后执行先前刚拷到机器里的一个可执行程序。

#re:

[InstallShield]卸载相关问题2004-10-2711:

07piggybank

pk,不用客气

1、InstallShield中涉及到LaunchAppAndWait等不支持网络资源访问。

但是可以测试一下先把网络资源映射为本地硬盘,应该是可以的。

2、启动时运行,一般都是在注册表的Run、RunOnce或者启动组方一个快捷方式来实现的。

比如:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce

InstallShield自己也支持安装过程中中途重新启动,下次继续。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

HKEY_LOCAL_MACHINE\System\CurrentControlSet\SessionManager\FileRenameOperations

比如IS会监视在安装过程中上述注册表位置下的项是否发生变化,如果发生变化表明需要重新启动。

当然,在你的需求里只要把你要运行的程序的快捷方式放到快捷组里就足够了。

#re:

[InstallShield]卸载相关问题2004-10-2810:

48pk

piggybank,你的答复!

怪我自己,昨天没把情况讲清楚。

其实我现在遇到的问题是:

刚刚完成了一个JSP作的信息管理系统,B/S的。

数据库用的是ORACLE9i,OS是windows2000server,我本来按照以往的方法作好了一个在数据库服务器本地执行的数据库安装和初始化程序SRVINST,包括创建用户、建表等等。

是由批处理命令和SQL文件组成的,功能和你提供的xzSQLDeploy类似(我的没有GUI界面,难看些,呵呵)。

现在项目要验收了,用户忽然要求作一个所谓的数据库远程安装程序,就是说在任何一台联网的机器上(可能没有安装ORACLE客户端),只要运行安装程序,就能对指定的数据库服务器进行数据库的安装和初始化,当然前提是服务器端的ORACLE实例已经建好,并且监听和实例等服务都启动了。

我原本考虑了两个解决的方法:

第一就是看能否在InstallShield里能否远程访问?

如果行,就直接调用服务器上的SQLPLUS执行本地的SRVINST。

也就是我昨天问你的问题1。

不过看来好像不行呀,我不能要求用户在安装前先将服务器网络资源映射为本地硬盘呀。

领导那儿也通不过的。

第二就是干脆将ORACLE的客户端打包到安装程序里(虽然有点问题,好在服务器端的ORACLE是用户掏钱了的,将就点了)。

具体是:

1.将打包的ORACLE9i的客户端文件和数据库创建及初始化程序SRVI

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1