卸载期间自定义操作不起作用

Posted

技术标签:

【中文标题】卸载期间自定义操作不起作用【英文标题】:Custom Action not working during uninstallation 【发布时间】:2013-04-01 05:55:39 【问题描述】:

我正在使用 Installshield 2011 开发安装程序,项目类型为基本 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

我错过了什么吗?

【问题讨论】:

您想要完成的自定义操作是什么?它是否试图与在卸载过程中(已经)被删除的文件进行交互?附带说明:我避免像瘟疫一样使用 InstallScript。 问候 NGaida,当前的自定义操作仅包含弹出消息,除此之外我没有做任何事情。基本上我想先测试一下,然后才能进行实际的实现,即在卸载期间从 app.config 文件中删除 XML 标记。 InstallScript 自 InstallShield 12 以来一直很稳定。不过,我不再投资它了。我倾向于用 C#/DTF 和偶尔的 C++ 做所有事情。但我并不是说“避免”InstallScript。 @ChristopherPainter 我需要在安装我的 msi 文件期间卸载 2 个应用程序。我编码以编程方式卸载应用程序并在 installer.cs 中调用该函数。但这不是卸载应用程序,我已经提出SO中的问题请查看并指导我***.com/questions/26863294/… 【参考方案1】:

我的第一个问题是您为什么要编写自定义操作? InstallShield 的内置自定义操作(XML 文件更改)已经能够在卸载时删除元素。我的第二个观察是 InstallScript 作为一种语言是可靠的,它缺乏对如何正确设计往往会导致问题的自定义操作的理解。我读过:

Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer

请务必在 InstallInitialize 和 InstallFinalize 之间的系统上下文中将所有修改系统的自定义操作安排为延迟。还要确保使用 CustomActionData 模式并在卸载被取消或失败时进行相应的回滚操作。否则,您可能会遇到应用程序已安装但标签丢失的情况。

当然,永远不要在已经存在的地方重新发明***。 (XMLFileChanges) 很少顺利。

【讨论】:

在 ISWI 刚推出时,我就被 InstallScript 烧死了。从那时起我就避免了它,只使用了 C++ 自定义操作。我完全同意;避免重新发明***。如果你觉得有必要,你应该问问自己为什么。 同意。那时你必须有一个 setup.exe 来引导引擎运行时并且有各种导致错误的 DCOM/ROT 问题。它还违反了 MSI 原则,允许延迟自定义操作访问 MSI 句柄。然而,这一切都在 7 年前修复:blog.iswix.com/2006/04/installshield-12-beta2.html 谢谢大家,我会使用 XMLFileChanges

以上是关于卸载期间自定义操作不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在MSI安装期间重新启动Explorer.exe不起作用

数据表操作自定义删除确认不起作用

自定义操作的 Django Rest Framework URL 不起作用

自定义后退按钮图像在导航栏上不起作用

IOS自定义导航返回按钮不起作用

TapGestures 在自定义 TableViewCell 中不起作用