![](/img/trans.png)
[英]TFS Build Workflow - InvokeProcess for SC.EXE? Or Custom Activity?
[英]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.