在InstallExecuteSequence 表序列中的哪个位置应放置自定义操作类型 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
查看时,以上应该在CustomAction table
中产生类似的东西:
|
Action
: 运行执行卸载 |Type
: 3154 |Source
: 文件名.exe |Target
: |
一些 CA 详细信息
通常在标准操作之前RemoveFiles
和running 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 安装程序自定义操作:提交操作不会执行
- 测试延迟和回滚自定义操作