我有现有的产品,它使用installshield 2011来生成msi。
目前我们计划支持Windows Server 2012 R2,但现有代码无效。
我们有一个场景,我们检查是否有一些依赖项丢失,我们中止或退出,但这不适用于Windows 2012 R2。
有没有其他方法来处理这个问题,我已经在一些论坛中检查过它返回“ERROR_INSTALL_FAILURE”,但是我无法从customAction的大部分内容返回。
如何在同一时间中止安装。
谢谢,
答案 0 :(得分:1)
我相信abort
存在问题,导致从一路上修复的InstallScript自定义操作返回ERROR_INSTALL_FAILURE
;您可以通过在您使用的版本之后查看InstallShield版本的发行说明来验证这一点。如果升级是一个选项,那可能是最简单的,因为InstallShield 2011不正式支持Windows Server 2012R2。 (这有助于我的雇主继续向我付款。)
如果你想用你拥有的东西修复行为,听起来你说问题是你有一个深层嵌套的函数,它不能轻易地将ERROR_INSTALL_FAILURE
返回到自定义操作入口点。最少侵入性的变化可能是使用例外和exception handling。您可以将try
/ catch
/ endcatch
放入入口点函数(或函数)中,并使用Err.Raise
抛出先前使用{{1}的异常}。与链接示例不同,abort
和Err.Raise
/ try
/ catch
将故意处于不同的功能中。
请注意,如果从其他函数调用使用endcatch
更改为使用abort
的函数,则观察到的行为可能与这些函数不同,除非它们类似地将异常转换为其首选行为。 / p>