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

What Should the Sequence Position be for a Custom Action Type 18 for Uninstalls?

InstallExecuteSequence table sequence 中应该放置 自定义操作类型 18(执行作为安装一部分的应用程序)以便它仅在卸载期间运行因为 "REMOVE="ALL""Installed" 条件已应用于它 - 所以它不会在 运行?

之前被删除

WiX 模型

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

Synchronous, deferred execution in system context, ignore exit code, run 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:当用 Orca 查看时,上面应该在 CustomAction table 中产生类似这样的东西:

| Action: RunExeUninstall | Type: 3154 | Source: Filename.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 手动取消 - 或者某些 运行 与您的自定义操作无关的时间故障 - 磁盘不足 space、光盘错误等...)。

如果你使 changes to per-machine locations(标准用户不可写)你需要 运行 和 elevated rights (deferred execution in system context).

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


一些链接(很好):