2

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 に設定することですが、他のエラーを隠している可能性があるため、このアプローチは好きではありません。

どんな助けでも大歓迎です。

ありがとう、

タイソン・モンクリーフ

4

0 に答える 0