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 に設定することですが、他のエラーを隠している可能性があるため、このアプローチは好きではありません。
どんな助けでも大歓迎です。
ありがとう、
タイソン・モンクリーフ