C# TFS生成工作流-是否为SC.EXE调用流程?还是定制活动?
我需要在构建工作流中运行命令。具体来说,它是sc.exe,具有如下某些参数:C# TFS生成工作流-是否为SC.EXE调用流程?还是定制活动?,c#,.net,tfs,build-automation,C#,.net,Tfs,Build Automation,我需要在构建工作流中运行命令。具体来说,它是sc.exe,具有如下某些参数: sc.exe \\computerName STOP "serviceName" 在构建工作流中,我是否可以使用InvokeProcess活动来执行此操作?我想避免批处理文件。我是否应该使用InvokeProcess,如果是,我是否必须提供SC.exe的路径。我不这么认为,因为不管工作目录是什么,它的路径都是可以识别的(我认为是因为它是windows系统的可执行文件) 或者我应该以另一种方式执行此操作?您应该能够使用
sc.exe \\computerName STOP "serviceName"
在构建工作流中,我是否可以使用InvokeProcess活动来执行此操作?我想避免批处理文件。我是否应该使用InvokeProcess,如果是,我是否必须提供SC.exe的路径。我不这么认为,因为不管工作目录是什么,它的路径都是可以识别的(我认为是因为它是windows系统的可执行文件)
或者我应该以另一种方式执行此操作?您应该能够使用
InvokeProcess
活动。将FileName
属性设置为“sc.exe”,并将参数设置为
String.Format("\\{0} STOP ""{1}""", ComputerName, ServiceName)
假设作用域中有名为ComputerName和ServiceName的变量。您应该将FileName属性设置为“cmd.exe”,然后将参数设置为
“/c sc.exe\\computerName STOP”+ServiceName这是可行的,但您或任何人是否知道如何让命令等待服务实际停止。在知道服务已停止之前,我不想进入生成工作流的下一步。如果要停止服务并等待其停止,您可以创建一个While
循环,该循环运行sc query
并延迟循环,直到查询显示stopped为止。稍晚一点,但在Whle活动中,从InvokeProcess调用一个批处理,该批处理执行“sc.exe%1 query%2 | find/C/I”%3“,其中%1是服务器名称(带斜杠),%2是您要查找的ServiceKeyName(因此,如果它是W3SVC中的万维发布服务插件),最后%3是您要查找的唯一术语(如引号中的“已停止”或“正在运行”)。如果找到工作id,它将返回1,如果找不到,则返回0。HTH。