卸载的自定义操作类型 18 的序列位置应该是什么?



在InstallExecuteSequence 表序列中的哪个位置应放置自定义操作类型 18(执行作为安装一部分的应用程序(,以便它仅在卸载期间运行,因为"REMOVE="ALL""Installed"条件已应用于它 - 因此在运行之前不会删除它?

WiX 模型

您使用什么工具?这是一个快速的WiX片段

Synchronousdeferred execution in system contextignore exit coderun on all types of uninstalls(也是主要的升级卸载(和running before the RemoveFiles Action

<CustomAction Id="RunExeUninstall" FileKey="notepad.exe" ExeCommand="" 
Return="ignore" Execute="deferred" Impersonate="no" />
<...>
<InstallExecuteSequence>
<Custom Action="RunExeUninstall" Before="RemoveFiles">REMOVE="ALL"</Custom>
</InstallExecuteSequence>

逆戟鲸:当用Orca查看时,以上应该在CustomAction table中产生类似的东西:

|Action: 运行执行卸载 |Type: 3154 |Source: 文件名.exe |Target: |


一些 CA 详细信息

通常在标准操作之前RemoveFilesrunning synchronously- 以便the EXE custom action thread需要完成the setup's main thread才能继续(或者主胎面可能会在 EXE CA 中完成之前卸载文件(。

我通常将error processing设置为卸载自定义操作的ignore exit code(或者回滚可能会意外启动 - 通过撤消卸载将您的安装放回盒子上 - 使安装程序不可卸载并且可能不可升级 - 次要升级应该仍然有效,但主要升级可能会失败(。

此自定义操作是否会对系统进行更改?(而不是仅仅检查或记录某些内容(。然后它应该有一个相应的rollback custom action,在主要自定义操作的序列中插入,如果手动中止安装程序,则撤消其更改(当您忽略退出代码时,CA 本身不应触发回滚,但安装程序仍然可以由用户手动取消,或者由检查退出代码的其他 CA 取消 - 或与您的自定义操作无关的某些运行时故障 - 磁盘空间不足, 光盘错误等(。

如果使changes to per-machine locations(标准用户无法写入(,则需要使用elevated rights运行(deferred execution in system context(。

这里有很多陷阱。请注意,策略或属性可以禁用回滚 - 导致回滚和提交自定义操作永远不会运行。我将在底部添加一些链接。


一些链接(非常好(:

  • Windows 安装程序中自定义操作的安装阶段和脚本内执行选项(installsite.org 的 MSI 专家 Stefan Krüger
  • (
  • Windows 安装程序自定义操作:提交操作不会执行
  • 测试延迟和回滚自定义操作

最新更新