簡體   English   中英

InvokeProcess的TFS活動(無需等待)

[英]TFS Activity for InvokeProcess (without wait)

我看到很多帖子都在等待各種活動的返回值,但是在這種情況下,我想開始一項活動然后不等待。 我只想通過(非常慢的)網絡復制目錄,所以我不希望為此創建另一個活動或使用批處理腳本。 有人這樣做嗎? 有沒有干凈的方法? 我可以將一些東西拼湊在一起,但我正在嘗試盡可能地保持這種效果。

這是將創建新流程的簡單自定義活動:

[BuildActivity (HostEnvironmentOption.All)]
public sealed class InvokeProcessAsync : CodeActivity
{
    [RequiredArgument]
    public InArgument<string> FileName { get; set; }

    public InArgument<string> Arguments { get; set; }

    public InArgument<string> WorkingDirectory { get; set; }

    public InArgument<IDictionary<string, string>> EnvironmentVariables { get; set; }



    protected override void Execute (CodeActivityContext context)
    {
        context.DublicateOperationsLogsToBuildOutput ();

        var psi = new ProcessStartInfo
        {
            FileName = context.GetValue (this.FileName),
            Arguments = context.GetValue (this.Arguments),
            WorkingDirectory = context.GetValue (this.WorkingDirectory)
        };

        var env_vars = context.GetValue (this.EnvironmentVariables);
        if (env_vars != null)
        {
            foreach (var v in env_vars)
                psi.EnvironmentVariables.Add (v.Key, v.Value);
        }

        Process.Start (psi);
    }
}

我認為沒有可用的開箱即用的東西。

一種進行方式是組織“調用過程”,該過程調用另一個執行實際復制的服務。 因此,您可以從Build內部進行擴展,並讓被調用的實體(就TFS構建而言不在范圍內)進行實際的活動。 這確實存在某些缺陷,更重要的是,如果成功或失敗,您將永遠不會在構建日志中知道。

另一個選擇是使用Parallel活動(在“控制流”下的“工具箱”中System.Activities.Statements.Parallel )。 這與您所需要的不完全相同(踢完即忘),它仍然可以讓您在復制發生時做其他事情。

您需要Build.Workflow程序集中的CopyDirectory活動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM