在Team Foundation Server 2015 Build(内部部署)中,我遇到运行简单命令行命令的问题。所有命令行任务都失败,并显示以下错误:“找不到文件:”。
以下面的构建定义为例:
这是使用内部部署的Build Agent执行的,并且会在日志中失败并出现以下异常:
BUILD FAILED
2016-01-20T12:04:47.5127709Z ##[warning]Filename doesn't indicate a full path to a executable file.
2016-01-20T12:04:47.5127709Z Executing the following commandline. (workingFolder = D:\_work\2\s)
2016-01-20T12:04:47.5127709Z date
2016-01-20T12:04:47.5127709Z Error message highlight pattern:
2016-01-20T12:04:47.5127709Z Warning message highlight pattern:
2016-01-20T12:04:47.5439748Z ##[error]File not found: date
当然这是一个简化的例子,我只想使用date /t
命令输出当前日期。但是我尝试过的所有常规命令行命令都会出现同样的问题,例如dir
,time
,path
等。MSDN does not provide any troubleshooting info就此而言,除此之外执行的工具必须位于PATH变量中。
该问题并非特定于一个构建定义或回购;它也可以在其他人身上复制。
构建作为内置的 svc_tfsbuild 帐户运行。
我可能认为这可能是一个简单的设置,或者 - 疯狂猜测 - 与权利相关的问题,但找不到任何文档在哪里查看或检查什么。任何帮助将不胜感激。
答案 0 :(得分:13)
看来这也是known issue on MS Connect。
简而言之,MSFT提到以下内容:
命令提示符内置的命令不起作用。根据你的PATH / PATHEXT可以解决任何问题。
在2015年10月27日的评论中,声明将在下一个冲刺中修复此问题。目前提到的解决方法是先执行 cmd.exe ,然后将其余部分作为参数提供。
使用原始问题中的示例,这将导致:
public class MainActivity extends Activity {
public static int MILISEGUNDOS_ESPERA = 1500;
private RelativeLayout mealLayout;
private ToggleButton toggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mealLayout = (RelativeLayout) findViewById(R.id.layout);
final Vibrator vibrator;
vibrator = (Vibrator) getSystemService(MainActivity.VIBRATOR_SERVICE);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
esperarYCerrar(MILISEGUNDOS_ESPERA);
if (action == MotionEvent.ACTION_DOWN) {
vibrator.vibrate(1500);
} else if (action == MotionEvent.ACTION_UP) {
vibrator.cancel();
}
return true;
}
});
}
public void esperarYCerrar(int milisegundos) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// acciones que se ejecutan tras los milisegundos
finalizarApp();
cambiarcolor();
}
}, milisegundos);
}
/**
* Finaliza la aplicación
*/
public void finalizarApp() {
mealLayout.setBackgroundColor(Color.RED);
}
public void cambiarcolor() {
ToggleButton button=(ToggleButton) findViewById(R.id.button1);
if (button.isChecked())
mealLayout.setBackgroundColor(Color.GREEN);
else
mealLayout.setBackgroundColor(Color.RED);
}
}
我确实可以确认这是有效的。