我已有产品,使用installshield 2011生成msi。
目前我们计划支持windows server 2012 R2,但是现有的代码不能工作。
我们有一个场景,当我们检查一些依赖项丢失时,我们中止或退出,但这在windows 2012 R2上不起作用。
是否有其他方法来处理这个问题,我在一些论坛上检查过,它说返回"ERROR_INSTALL_FAILURE",但我不能从customAction的大部分部分返回。
如何在同一点中止安装。
谢谢,
我确实相信有一个问题,abort
没有导致ERROR_INSTALL_FAILURE
从InstallScript自定义操作中返回,这是固定的;你可以通过查看你正在使用的InstallShield版本的发行说明来验证这一点。如果可以选择升级,这可能是最简单的方法,因为InstallShield 2011不正式支持Windows Server 2012R2。(而且它还能帮助我的雇主继续付给我薪水。)
如果你想用你所拥有的修复行为,听起来你在说问题是你有一个深度嵌套的函数,不能轻易地将ERROR_INSTALL_FAILURE
返回到自定义动作入口点。干扰最小的更改可能是使用异常和异常处理。您可以将try
/catch
/endcatch
放在您的入口点函数(或多个函数)中,并在之前使用abort
的地方使用Err.Raise
抛出异常。与链接的示例不同,Err.Raise
和try
/catch
/endcatch
将被有意地放在不同的功能中。
请注意,如果您从使用abort
更改为使用Err.Raise
的函数是从其他函数调用的,则观察到的行为可能与这些函数不同,除非它们类似地将异常转换为它们首选的行为。