MSBuild: Как я могу проверить, существует ли процесс? - PullRequest
3 голосов
/ 19 марта 2009

Можно ли написать условие в msbuild, которое проверяет, существует ли определенный процесс? Или, альтернативно, кто-нибудь знает о такой задаче?

Сегодня мой процесс создает pid-файл, существование которого я проверяю. Но мне не нравятся все дополнительные операции, связанные с таким файлом.

Есть идеи?

1 Ответ

5 голосов
/ 19 марта 2009

Нет такой задачи в MSBuild Extension Pack или в Задачи сообщества MSBuild . Но вы могли бы легко создать такой. Как то так:

using System.Diagnostics;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;

namespace StackOverflow.MSBuild
{
  public class IsProcessRunning : Task
  {
    private string processName;
    private bool isRunning;

    [Required]
    public string ProcessName
    {
      get { return processName; }
      set { processName = value; }
    }

    [Output]
    public bool IsRunning
    {
      get { return isRunning; }
    }

    public override bool Execute()
    {
      if(string.IsNullOrEmpty(processName))
      {
        Log.LogError("ProcessName could not be empty");
        return false;
      }

      foreach(Process clsProcess in Process.GetProcesses())
      {
        if(clsProcess.ProcessName.Contains(processName))
        {
          isRunning = true;
        }
      }

      return true;
    }
  }
}

И вы используете это так:

<UsingTask AssemblyFile="$(Task_Assembly_path)"
         TaskName="StackOverflow.MSBuild.IsProcessRunning" />

<Target Name="TestTask">
  <IsProcessRunning ProcessName="${Process}">
    <Output ItemName="Result" TaskParameter="IsRunning"/>
  </IsProcessRunning>

  <Message Text="Process ${Process} is running"
           Condition="'${Result}' == 'true'"/>
</Target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...