自定义操作 - 仅在安装时卸载
Custom Action - Only uninstall if installed
我有一个 Windows 安装程序项目附加到我的解决方案,它允许用户使用 "Checkboxes" 对话框有选择地安装应用程序的两个组件(它们是 Windows 服务)我已添加到用户界面的框,然后是自定义操作的条件...
即在自定义操作/安装中我有
ProjectA 的主要输出(活动)
- 条件 = PROJECTACHOSEN
(即 Checkbox1Property 值)
ProjectB 的主要输出(活动)
- 条件 = PROJECTBCHOSEN
(即 Checkbox2Property 值)
在自定义操作/卸载中,我添加了相同的两个 "Primary Outputs"。
问题是,如果在安装过程中用户只选择了两个项目之一,那么卸载程序仍然会尝试卸载这两个服务,当然会在找不到丢失的服务时抛出错误,导致卸载失败。
我可以在“卸载”中添加什么条件以仅安装当前已安装的服务?
我试过:
- 添加与安装相同的条件 - 这根本不会删除服务(可能是因为您在卸载过程中没有勾选方框)
- Condition = "Installed" 这是我在网上其他地方看到的。这似乎被忽略了,卸载程序仍会尝试卸载这两项服务。
到目前为止,我想出的最佳解决方案是:
为每个项目添加一个文件搜索"Launch Condition",检查作为服务的 .exe 文件是否存在,并给它一个 "Property" 值。
使用 属性 值作为自定义操作的 "Condition"。
这行得通,但我对此并不完全满意,因为删除服务比删除 exe 更重要,如果 exe 丢失,它将无法工作,服务将保留...
编辑
除非我将搜索 "Depth" 设置为至少 3(即使 exe 文件在安装目录中并且 "Folder" 设置为 [TARGETDIR]),否则即使这样也不起作用,但如果我这样做,安装程序需要大约 20 秒才能启动 - 大概是因为搜索 3 级子目录需要时间。但是,如果我设置的比那个小,尽管安装程序启动很快,它现在似乎找不到 exe 并且不会卸载服务...
[TARGETDIR] 不应该反映我的安装目录并因此使用深度 0 吗?
您可以使用 ?ComponentName
检查组件的安装状态,几个月前我也用过类似的方法。
我在 flexera here
的作弊 sheet 中找到了它
我有一个 Windows 安装程序项目附加到我的解决方案,它允许用户使用 "Checkboxes" 对话框有选择地安装应用程序的两个组件(它们是 Windows 服务)我已添加到用户界面的框,然后是自定义操作的条件...
即在自定义操作/安装中我有
ProjectA 的主要输出(活动)
- 条件 = PROJECTACHOSEN
(即 Checkbox1Property 值)
ProjectB 的主要输出(活动)
- 条件 = PROJECTBCHOSEN
(即 Checkbox2Property 值)
在自定义操作/卸载中,我添加了相同的两个 "Primary Outputs"。
问题是,如果在安装过程中用户只选择了两个项目之一,那么卸载程序仍然会尝试卸载这两个服务,当然会在找不到丢失的服务时抛出错误,导致卸载失败。
我可以在“卸载”中添加什么条件以仅安装当前已安装的服务?
我试过:
- 添加与安装相同的条件 - 这根本不会删除服务(可能是因为您在卸载过程中没有勾选方框)
- Condition = "Installed" 这是我在网上其他地方看到的。这似乎被忽略了,卸载程序仍会尝试卸载这两项服务。
到目前为止,我想出的最佳解决方案是:
为每个项目添加一个文件搜索"Launch Condition",检查作为服务的 .exe 文件是否存在,并给它一个 "Property" 值。
使用 属性 值作为自定义操作的 "Condition"。
这行得通,但我对此并不完全满意,因为删除服务比删除 exe 更重要,如果 exe 丢失,它将无法工作,服务将保留...
编辑
除非我将搜索 "Depth" 设置为至少 3(即使 exe 文件在安装目录中并且 "Folder" 设置为 [TARGETDIR]),否则即使这样也不起作用,但如果我这样做,安装程序需要大约 20 秒才能启动 - 大概是因为搜索 3 级子目录需要时间。但是,如果我设置的比那个小,尽管安装程序启动很快,它现在似乎找不到 exe 并且不会卸载服务...
[TARGETDIR] 不应该反映我的安装目录并因此使用深度 0 吗?
您可以使用 ?ComponentName
检查组件的安装状态,几个月前我也用过类似的方法。
我在 flexera here
的作弊 sheet 中找到了它