我在解决方案上附加了一个Windows Installer项目,该项目允许用户使用已添加到用户界面中的“复选框”对话框选择安装应用程序的两个组件(它们是Windows Services),并且然后是“自定义操作的条件...”
即在“自定义操作/安装”中
ProjectA的主要输出(活动)
-条件= PROJECTACHOSEN
(即Checkbox1Property值)
ProjectB的主要输出(活动)
-条件= PROJECTBCHOSEN
(即Checkbox2Property值)
在“自定义操作/卸载”中,我添加了相同的两个“主要输出”。
问题是,如果在安装过程中用户仅选择了两个项目之一,则卸载程序仍会尝试卸载这两个服务,并且当它找不到丢失的服务时当然会引发错误,从而导致卸载失败。
我可以在“卸载”中添加什么条件以仅在当前已安装服务的情况下安装该服务?
我尝试过:
答案 0 :(得分:1)
您可以使用?ComponentName
来检查组件的安装状态,几个月前我也类似地使用它。
我已经从flexera here的备忘单中找到了有关它的信息
答案 1 :(得分:0)
到目前为止,我设法提出的最佳解决方案是:
为每个项目添加文件搜索“启动条件”,以检查是否存在作为服务的.exe文件,并为其提供“属性”值。
使用属性值作为“自定义操作”的“条件”。
此方法有效,但我并不完全满意,因为删除该服务比exe更重要,如果该exe丢失,它将无法正常工作,并且该服务将保持不变...
修改
除非我将搜索“深度”设置为至少3(即使exe文件位于安装目录中,并且“文件夹”设置为[TARGETDIR]),否则即使无法运行,但是,如果这样做,安装程序仅需20秒钟即可启动-大概是因为搜索3个级别的子目录需要花费时间。但是,如果我设置为小于此值,尽管安装程序可以快速启动,但现在似乎找不到该exe文件,也无法卸载该服务...
[TARGETDIR]不能反映我的安装目录,因此深度为0吗?