我正在尝试使用 MSBuild 4.0 来卸载\安装我使用 MSBuild 扩展在 ItemGroup 中定义的一组 Windows 服务。我遇到的问题是,如果服务不存在,卸载 TaskAction 将出错。我希望能够使用 CheckExists TaskAction 在我的元数据中设置一个标志,我可以对条件语句进行评估。
但是,我无法弄清楚如何对服务列表进行批处理、调用 CheckExist 任务并更新我的元数据中的标志。请参阅下面的示例:
<ItemGroup>
<ServiceName Include="Service1">
<ExeName>Service1.exe</ExeName>
<ServicePath>$(LocalBin)\Service1.exe</ServicePath>
<User>LocalSystem</User>
<Exists></Exists>
</ServiceName>
<ServiceName Include="Service2">
<ExeName>Service2.exe</ExeName>
<ServicePath>$(LocalBin)\Service2.exe</ServicePath>
<User>LocalSystem</User>
<Exists></Exists>
</ServiceName>
</ItemGroup>
<Target Name="UninstallServices">
<!--how can I batch over this command to set %(ServiceName.Exist)-->
<MSBuild.ExtensionPack.Computer.WindowsService TaskAction="CheckExists" ServiceName="%(ServiceName.Identity)">
<Output TaskParameter="Exists" PropertyName="DoesExist"/>
</MSBuild.ExtensionPack.Computer.WindowsService>
<MSBuild.ExtensionPack.Computer.WindowsService TaskAction="Uninstall" ServiceName="%(ServiceName.Identity)" User="%(ServiceName.User)" ServicePath="%(ServiceName.ServicePath)" Condition="%(ServiceName.Exists) = 'True'" />
</Target>
我进行了一些搜索,但没有找到根据任务的输出结果更新元数据的示例。这是可能的吗?我应该采取不同的方法吗?
我目前针对这个问题的解决方案是在卸载调用时将 ContinueOnError 设置为 true,但我不喜欢这种方法,因为我可能会隐藏其他错误。
任何帮助,将不胜感激。
谢谢,
泰森·蒙克里夫