【问题标题】:Custom Action - Only uninstall if installed自定义操作 - 仅在安装后卸载
【发布时间】:2019-04-19 11:34:53
【问题描述】:

我有一个附加到我的解决方案的 Windows Installer 项目,它允许用户使用我添加到用户界面的“复选框”对话框选择安装应用程序的两个组件(它们是 Windows 服务),并且然后是自定义操作的条件...

即在自定义操作/安装我有

ProjectA 的主要输出(活动)
- 条件 = PROJECTACHOSEN(即 Checkbox1Property 值)

ProjectB 的主要输出(活动)
- 条件 = PROJECTBCHOSEN(即 Checkbox2Property 值)

在自定义操作/卸载中,我添加了相同的两个“主要输出”。

问题是,如果用户在安装过程中只选择了两个项目之一,那么卸载程序仍然会尝试卸载这两个服务,当然当它没有找到丢失的服务时会抛出错误,导致卸载失败。

我可以在卸载中添加什么条件以仅安装当前已安装的服务?

我试过了:

  • 添加与安装相同的条件 - 这根本不会删除服务(可能是因为您在卸载过程中没有勾选框)
  • Condition = “已安装”,这是我在网络上其他地方看到的。这似乎被忽略了,卸载程序仍会尝试卸载这两项服务。

【问题讨论】:

标签: visual-studio visual-studio-2017 windows-installer custom-action visual-studio-setup-proje


【解决方案1】:

您可以使用?ComponentName 来检查组件的安装状态,几个月前我也使用过。

我在 flexera here 的备忘单中发现了它

【讨论】:

    【解决方案2】:

    到目前为止,我设法提出的最佳解决方案是:

    1. 为每个检查作为服务的 .exe 文件是否存在的项目添加文件搜索“启动条件”,并为其指定“属性”值。

    2. 使用属性值作为自定义操作的“条件”。

    这可行,但我对此并不完全满意,因为删除服务比删除 exe 更重要,如果 exe 丢失,它将无法工作,服务将保留......

    编辑

    除非我将搜索“深度”设置为至少 3(即使 exe 文件位于安装目录中并且“文件夹”设置为 [TARGETDIR]),否则即使这样也不起作用,但如果我这样做,安装程序需要大约 20 秒才能启动 - 大概是因为搜索 3 级子目录需要时间。但是,如果我设置的值低于这个值,尽管安装程序启动速度很快,但它现在似乎找不到 exe 并且没有卸载服务......

    不应该 [TARGETDIR] 反映我的安装目录并因此使用深度 0 吗?

    【讨论】:

      猜你喜欢
      • 2010-10-06
      • 2012-01-26
      • 2011-08-10
      • 2013-03-08
      • 2013-06-29
      • 1970-01-01
      • 2012-03-21
      • 2018-02-24
      • 1970-01-01
      相关资源
      最近更新 更多