我们有一个配置的TFS CI正在进行构建。在构建之后,我想将我的简单可执行应用程序部署到服务器上的特定文件夹然后启动。
我决定使用post-build步骤和批处理脚本来完成此操作。除了一个以外,一切都很完美:
当应用程序被盯着时,构建代理(运行我的脚本的代理)挂起。
以下是我从脚本中启动应用程序的方法:
start /b %depldir%\MyApp.exe [params] > log.txt
所以我在backgroound中启动它并将std out / error重定向到文件。
应用程序正确启动但构建过程不会完成,直到我杀死应用程序。
如果没有构建代理等待它完成,如何启动我的应用程序?
答案 0 :(得分:1)
我不确定这是否是一个错误,但如果您使用start /b something > logfile.txt
,则新的隐藏cmd窗口将以参数/k
启动。这会强制隐藏窗口保持活动状态。这使得调用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然后返回CMD提示符。 这对于测试,检查变量(取自http://ss64.com/nt/cmd.html)
非常有用
简而言之:将start /b
替换为call
时,它可以正常工作。遗憾的是,call
没有像/ b这样的参数,因此您的应用程序无法在后台启动。我不知道这对你来说是否有问题。
如果是:我的Jenkins构建服务器遇到了类似的问题。我的解决方案是创建一个运行我的应用程序的任务(在后台)。我只是致电SCHTASKS /Run /TN "TASK_NAME"
而不是调用程序本身。此命令只是触发任务而无需等待。这样您还可以避免权限等问题。