2009-03-19 2 views
3

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

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

Любые идеи?

ответ

5

Нет такой задачи в MSBuild Extension Pack или в MSBuild 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> 
+0

я предлагаю использовать Process.GetProcessesByName (). Кроме того, в C# 3.0 вы можете использовать тривиальные декларации свойств, которые сокращают беспорядок, например: public string «ProcessName {get; set;}» «public bool IsRunning {get; private set;}" – Wedge

Смежные вопросы