自定义操作-仅在安装后卸载

时间:2018-11-16 09:43:52

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

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

即在“自定义操作/安装”中

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

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

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

问题是,如果在安装过程中用户仅选择了两个项目之一,则卸载程序仍会尝试卸载这两个服务,并且当它找不到丢失的服务时当然会引发错误,从而导致卸载失败。

我可以在“卸载”中添加什么条件以仅在当前已安装服务的情况下安装该服务?

我尝试过:

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

2 个答案:

答案 0 :(得分:1)

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

我已经从flexera here的备忘单中找到了有关它的信息

答案 1 :(得分:0)

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

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

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

此方法有效,但我并不完全满意,因为删除该服务比exe更重要,如果该exe丢失,它将无法正常工作,并且该服务将保持不变...

修改

除非我将搜索“深度”设置为至少3(即使exe文件位于安装目录中,并且“文件夹”设置为[TARGETDIR]),否则即使无法运行,但是,如果这样做,安装程序仅需20秒钟即可启动-大概是因为搜索3个级别的子目录需要花费时间。但是,如果我设置为小于此值,尽管安装程序可以快速启动,但现在似乎找不到该exe文件,也无法卸载该服务...

[TARGETDIR]不能反映我的安装目录,因此深度为0吗?