对于卸载的自定义操作类型 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 详细信息
一般在标准动作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 手动取消 - 或者某些 运行 与您的自定义操作无关的时间故障 - 磁盘不足 space、光盘错误等...)。
如果你使 changes to per-machine locations
(标准用户不可写)你需要 运行 和 elevated rights
(deferred execution in system context
).
这里有很多陷阱。请注意,回滚可以通过策略或 属性 禁用 - 导致回滚和提交自定义操作永远不会 运行。我会在底部添加一些链接。
一些链接(很好):
- Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer (MSI-Expert Stefan Krüger of installsite.org)
- Windows Installer custom actions: commit action won't get executed
- Testing your deferred and rollback custom actions
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 详细信息
一般在标准动作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 手动取消 - 或者某些 运行 与您的自定义操作无关的时间故障 - 磁盘不足 space、光盘错误等...)。
如果你使 changes to per-machine locations
(标准用户不可写)你需要 运行 和 elevated rights
(deferred execution in system context
).
这里有很多陷阱。请注意,回滚可以通过策略或 属性 禁用 - 导致回滚和提交自定义操作永远不会 运行。我会在底部添加一些链接。
一些链接(很好):
- Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer (MSI-Expert Stefan Krüger of installsite.org)
- Windows Installer custom actions: commit action won't get executed
- Testing your deferred and rollback custom actions