【问题标题】:What Should the Sequence Position be for a Custom Action Type 18 for Uninstalls?卸载的自定义操作类型 18 的序列位置应该是什么?
【发布时间】:2018-11-19 01:52:42
【问题描述】:

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

【问题讨论】:

标签: windows-installer uninstallation custom-action


【解决方案1】:

WiX 模型

你使用什么工具?这是一个快速的WiX sn-p

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:当使用Orca 查看时,上述内容应在CustomAction table 中产生类似的内容:

| Action: RunExeUninstall | Type: 3154 | Source: 文件名.exe | Target:|


一些 CA 细节

一般在标准动作之前RemoveFilesrunning synchronously——这样the EXE custom action thread需要在@之前完成987654343@ 可以继续(否则主线程可能会在您完成 EXE CA 之前卸载文件)。

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

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

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

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


一些链接(非常好):

【讨论】:

  • 这是我的第一个扩展安装项目。我正在使用 ORCA。鉴于您的建议,看来我可能不得不使用 VS 手动修改 MSI 文件。此可执行文件正在重置注册表。
  • 使用 Orca 并不适合创建设置。它更像是一个查看器而不是一个编辑器,尽管它本身就非常出色(少数几个在保存 MSI 文件时不会添加垃圾的工具之一)。您是否考虑过可用的WiX or some of the other deployment tools
  • 请参阅上面 CustomAction table 中 Orca 表格行的更新文本。您还需要在InstallExecuteSequence table 中添加一行,但我认为您已经有了。
  • 所以您右键单击 MSI,选择 Uninstall 并且卸载未完成并进入回滚?
  • 有几种方法可以摆脱这种安装,但在过度使用之前,让我们试试Microsoft FixIt tool for installer problems。尝试运行它,看看这是否能解决您的问题。如果是这样,那就太好了。如果没有,请添加一个新问题,询问如何摆脱此类安装,我会写一些应该可行的 hacky 方法 - 但不建议这样做。
猜你喜欢
  • 2011-08-10
  • 2011-03-02
  • 2011-11-21
  • 1970-01-01
  • 2013-05-29
  • 2019-05-21
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
相关资源
最近更新 更多