繁体   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