MSBuild:如何检查进程是否存在?

5

是否有可能在msbuild中编写一个条件,检查某个进程是否存在? 或者,有没有人知道这样的任务?

今天,我的进程创建了一个pid文件,我检查它是否存在。但是我不喜欢涉及此类文件的所有额外维护。

有什么建议吗?

1个回答

5

MSBuild Extension PackMSBuild Community Tasks中都没有这样的任务。但是你可以轻松地创建一个类似的任务,就像这样:

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>

我建议使用Process.GetProcessesByName(<name>)。此外,在C# 3.0中,您可以使用简单的属性声明来减少混乱,例如:public string "ProcessName { get; set; }" "public bool IsRunning { get; private set; }"。 - Wedge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接