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"
。此命令无需等待即可触发任务。这样也可以避免权限等问题
我们有一个配置好的 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"
。此命令无需等待即可触发任务。这样也可以避免权限等问题