Tfs post-构建步骤 运行 应用程序挂起

Tfs post-build step running application hangs

我们有一个配置好的 TFS CI 正在构建。构建完成后,我希望将我的简单可执行应用程序部署到服务器上的特定文件夹,然后启动。

我决定使用 post-构建步骤和批处理脚本来完成此操作。一切都完美,除了一个:

启动应用程序时,构建代理(运行我的脚本的代理)挂起。

以下是我如何从脚本启动我的应用程序:

start /b %depldir%\MyApp.exe [params] > log.txt

所以我在后台启动它并将 std out/error 重定向到文件。

应用程序已正确启动,但在我终止应用程序之前构建过程不会完成。

如何在没有构建代理等待它完成的情况下启动我的应用程序?

我不确定这是否是一个错误,但如果您使用 start /b something > logfile.txt,新的隐藏命令 window 将以参数 /k 启动。这会强制隐藏 window 保持活动状态。这使得调用 bat 等待它退出,这就是您的构建不会终止的原因。为了验证这一点,我创建了两个文件:

starter.bat:

start /b tostart.bat > log.txt

tostart.bat:

echo started

当我启动 starter.bat 时,cmd 没有终止,在任务管理器中出现以下过程:

cmd.exe USER 00 00:00:00 1.400k C:\Windows\system32\cmd.exe /K tostart.bat

/K 表示:

/K Run Command and then return to the CMD prompt. This is useful for testing, to examine variables (taken from http://ss64.com/nt/cmd.html)

长话短说:将 start /b 替换为 call 时效果很好。不幸的是 call 没有像 /b 这样的参数,因此您的应用程序不会在后台启动。我不知道这对你来说是否是一个问题。

如果是:我的 Jenkins 构建服务器也遇到过类似的问题。我的解决方案是创建一个运行我的应用程序的任务(在后台)。我没有调用程序本身,而是调用 SCHTASKS /Run /TN "TASK_NAME"。此命令无需等待即可触发任务。这样也可以避免权限等问题