我正在使用Installshield 2011开发安装程序,项目类型是Basic MSI,我有自定义操作,按照应该在卸载过程中执行的方式排序。这是我已配置的自定义操作属性的附加快照。
我遇到的问题是在卸载过程中未执行已配置的自定义操作,最终安装的应用程序将不会被删除。
以下是详细记录的输入:
00532: (Unknown): InstallShield 11:01:17: Registering Msi Server...
00533: (Unknown): InstallShield 11:01:17: **Invoking script function MyFunction**
00534: (Unknown): InstallShield 11:01:17: **CallScriptFunctionFromMsiCA() ends**
00535: (Unknown): CustomAction NewCustomAction1 returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
00536: (Unknown): Action ended 11:01:17: **NewCustomAction1. Return value 3.**
00537: (Unknown): Action ended 11:01:17: **INSTALL. Return value 3.**
00538: (Property): Property(S): DiskPrompt = [1]
00539: (Property): Property(S): UpgradeCode = {40AD9645-1459-4C32-8285-D1C0B163361D}
00540: (Property): Property(S): ProductCode = {84BDE810-2C23-48CA-A638-5B131DA3B57F}
我在这里遗漏了什么吗?
答案 0 :(得分:2)
我的第一个问题是你为什么要写一个自定义动作? InstallShield的内置自定义操作(XML文件更改)已经能够在卸载时删除元素。我的第二个观察是,InstallScript作为一种语言是可靠的,它缺乏对如何正确设计往往会导致问题的自定义操作的理解。我读过:
Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer
确保在InstallInitialize和InstallFinalize之间安排将系统修改为系统上下文中的所有自定义操作。此外,请确保使用CustomActionData模式并在卸载取消或失败时进行相应的回滚操作。否则,您可能会遇到安装了应用程序但缺少标记的情况。
当然,永远不要重新发明已存在的车轮。 (XMLFileChanges)很少进展顺利。